Windows Develop Bookmark and Share   
 index > Windows Forms Sample Applications > I use the print class of FotoVision to make a image print program, why doesn't it work?
 

I use the print class of FotoVision to make a image print program, why doesn't it work?

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 = FileToPrintIdea;
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

You can use google to search for other answers

Custom Search

More Threads

• My Form-Designer doesnt work anymore!
• Error
• Hebrew localization
• Converting Windows Application to DLL
• Why DataGridView always throw an NullReferenceException when input value at the first time after pressing ESC ??????????????
• Public Terrarium Server?
• The old Story of IssueVision
• Older version of terrarium that supports C++
• HTTP Download Class & Application Updater Component
• Has Microsoft officially killed terrarium??