Sign in to follow this  

[.net] C# and the WIA Automation SDK

This topic is 3407 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hello everyone, I am currently programming in my sparetime C# and was trying to fiddle with my scanner. I downloaded from the Microsoft Download centre the WIA Automation Kit 2.0 and registered the .DLL and also referenced it to my project. I then try to type the following code:
CommonDialogClass wiadiag = new CommonDialogClass();
WIA.ImageFile wijnand = null;
wijnand = wiadiag.ShowAcquireImage(WiaDeviceType.UnspecifiedDeviceType, WiaImageIntent.GrayscaleIntent, WiaImageBias.MaximizeQuality,"", true, true, false);


When I start my application and hit the scan button I get to see the Select scanner option, I select the proper scanner and then have the choice between colors and the resolution. I select the settings and hit previes. This works fine and I see in my preview window the Picture I want. Then I hit the scan button and I am presented with the following Error : Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING)) I have tried it with 3 different machines (XP, VIsta) and 2 different scanners yet all of them portay the same error message. But when I do the following code :

String deviceid = "";   
            const string wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}";   
            CommonDialogClass class1 = new CommonDialogClass();   
            WIA.CommonDialog WiaCommonDialog = new CommonDialogClass();   
  
            Device d = class1.ShowSelectDevice(WiaDeviceType.UnspecifiedDeviceType, true,false);   
            Device Wiadev = null;   
            if (d != null)   
            {   
                ddeviceid = d.DeviceID;   
            }   
            DeviceManager manager = new DeviceManagerClass();   
            foreach (DeviceInfo info in manager.DeviceInfos)   
            {   
                if (info.DeviceID == deviceid)   
                {   
                    WIA.Properties infoprop = null;   
                      
                    Wiadev = info.Connect();   
                    break;   
                }   
            }   
  
            WIA.ImageFile img = null;   
            WIA.Item item = (WIA.Item)Wiadev.Items[1];   
  
            try   
            {    
                img = (ImageFile)WiaCommonDialog.ShowTransfer(Wiadev.Items[1],wiaFormatJPEG,false);   
                Vector vector = img.FileData;   
                byte[] bin = (byte[])vector.get_BinaryData();   
                using (MemoryStream mstrm = new MemoryStream(bin))   
                {   
                    pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;   
                    pictureBox1.Image = Image.FromStream(mstrm);   
                }   
                   
            }   
            catch(COMException f)   
            {   
               
            }  

It works and the picture gets loaded into the Picturebox albeit with the default settings. Does anyone know why my above code doesnt work? I found a lot of VS2005 projects who used the above method, am I missing something? Thank you

Share this post


Link to post
Share on other sites
Here's a wild guess but I notice in the first code you don't specify the format. Perhaps you need to do that?

const string wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}";  
wijnand = wiadiag.ShowAcquireImage(WiaDeviceType.UnspecifiedDeviceType, WiaImageIntent.GrayscaleIntent, WiaImageBias.MaximizeQuality, wiaFormatJPEG, true, true, false);

Share this post


Link to post
Share on other sites
Looking up the error code says it's "either the component has not been registered on the server or the ProgID passed to the Server.CreateObject method is misspelled"

But you have registered the component with regsvr32?

Share this post


Link to post
Share on other sites
Yes I have done a manual REGSVR32 just to make sure, even ruled out it was Windows Vista X64 by trying it on a Windows XP machine.

Before I tried running the XP one i ran my application without registering the .DLL and it gave me an error immediatly, when I registered it it showed the WIA things and then crapped out immediatly when I pressed the scan button again.

Maybe I need to do something in my project settings for it to put the .DLL in the assembly or something? And why does my more expanded code work (without the GUI) I am starting to suspect the Epson drivers themselves are at fault.

But maybe I am overlooking something :(

Share this post


Link to post
Share on other sites

This topic is 3407 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this