The following code is from FotoVision, I make a image print program using the class, but it doesn't work. Only after I have installed the FotoVision (The name of setup program is " FotoVision Desktop.msi ") my program just work. I think that FotoVision have packaged some other components such as dll or registered photowiz.dll in its setup program, but I'm not sure. If so, how can I register photowiz.dll with C# ? Could you help me, thanks! // Uses the XP Photo Printing Wizard to print one or more photos. // The implementation of the photo wizard is in photowiz.dll but the // interface is not exposed. Instead, Microsoft provides the Windows // Image Acquisition Library (WIA). // // Use late binding incase the user does not have the WIA component // installed (and easier for developers to use the source if it's // not installed). // use late binding for this source file // TRANSINFO: Option Strict Off using Microsoft.VisualBasic; using System; using System.Collections; using System.Drawing; using System.Diagnostics; using System.Windows.Forms; namespace FotoVision { public sealed class Print { // const values private class Consts { public const string DialogProgId = "WIA.CommonDialog"; public const string VectorProgId = "WIA.Vector"; } // static class private Print() { } // public methods // print the specified photo (full path to the photo) public static void PrintFile( string file ) { PrintFiles( new string[] { file } ); } // print the list of photos public static void PrintFiles( Photo[] photos ) { // convert to a string array string[] files = new string[ photos.Length - 1 + 1 ]; for ( int i=0; i<=files.Length - 1; i++ ) { files[ i ] = photos[ i ].PhotoPath; } PrintFiles( files ); } // print the list of files public static void PrintFiles( string[] files ) { try { // create the vector COM object object vector = Interaction.CreateObject( Consts.VectorProgId, "" ); Type vectorType = Type.GetTypeFromProgID(Consts.VectorProgId); // add files to the vector object foreach ( string file in files ) { //<TRANSMOD>Late Binding</TRANSMOD> vectorType.InvokeMember("Add", System.Reflection.BindingFlags.InvokeMethod, null, vector, new object[]{file}); //vector.Add( file ); } // create the common dialog COM object, and // display the photo print wizard //object dialog = Interaction.CreateObject( Consts.DialogProgId, "" ); //<TRANSMOD>Late Binding</TRANSMOD> object dialog = Interaction.CreateObject( Consts.DialogProgId, "" ); Type dlgType = Type.GetTypeFromProgID(Consts.DialogProgId); dlgType.InvokeMember("ShowPhotoPrintingWizard", System.Reflection.BindingFlags.InvokeMethod, null, dialog, new object[]{vector}); //dialog.ShowPhotoPrintingWizard( vector ); vector = null; dialog = null; } catch ( Exception ex ) { Global.DisplayError( "The photo could not be printed.", ex ); } } } }
I Love C# | | CUI WEI Monday, July 25, 2005 11:34 PM | Here is the simplified print code. Does this work for you?
| | ' create the vector COM object, add a picture be printed Dim vector As Object = CreateObject("WIA.Vector") vector.Add("D:\Windows\Zapotec.bmp") ' create the common dialog COM object, and display the photo print wizard Dim dialog As Object = CreateObject("WIA.CommonDialog")dialog.ShowPhotoPrintingWizard(vector)
|
| | BenWillett Tuesday, July 26, 2005 10:19 PM | Now I have checked other PC without FotoVision installed, I find photowiz.dll have been registered, so maybe register DLL is not cause! | | CUI WEI Monday, July 25, 2005 11:34 PM | Here is the simplified print code. Does this work for you?
| | ' create the vector COM object, add a picture be printed Dim vector As Object = CreateObject("WIA.Vector") vector.Add("D:\Windows\Zapotec.bmp") ' create the common dialog COM object, and display the photo print wizard Dim dialog As Object = CreateObject("WIA.CommonDialog")dialog.ShowPhotoPrintingWizard(vector)
|
| | BenWillett Tuesday, July 26, 2005 10:19 PM | The error information in my program when print is following:
System.ArgumentNullException can't be blank. Argument name: type at System.Activator.CreateInstance(Type type, Boolean nonPublic) at System.Activator.CreateInstance(Type type) at PhotoApp.Print.Printiles(String[] files) in E:\cw\PhotoApp\Print.cs:line 67
Thank you very much, but I'm not good at VB.net, could you give me C# code? | | CUI WEI Tuesday, July 26, 2005 11:29 PM | I think that the service of "Windows Image Acquisition (WIA)" isn't be started in default status of Windows XP. After install "FotoVision Desktop.msi", I think it make "Windows Image Acquisition (WIA)" active, is it correct? If so , how can I activate the service of "Windows Image Acquisition (WIA)" when install my program, you make install program using Inno Setup | | CUI WEI Wednesday, July 27, 2005 3:00 AM | I think that the installer of FotoVison have added some things to assembly cache of Microsoft .NET Framework 1.1 but I'm not sure what is added. | | CUI WEI Wednesday, July 27, 2005 9:02 AM | you're making it too difficult. Here's the easier code, once you import the WIA as a reference into C#:
WIA. CommonDialog cd = new WIA.CommonDialogClass(); WIA.Vector v = new WIA.VectorClass(); for (int i = 0; i < Picked; i++) { string s = FileToPrint ; object so = (object)s; v.Add(ref so, i); } object vo = (object)v; cd.ShowPhotoPrintingWizard( ref vo );
| | zipwax Wednesday, February 28, 2007 8:53 PM |
|