2013-12-17 4 views
0

Ошибка:Невозможно сканировать с помощью WIA на Windows 7 x64 Сообщ

Не удалось загрузить файл или сборку 'Interop.WIA, Version = 1.0.0.0, культура = нейтральной, PublicKeyToken = нуль' или один из его зависимостей. Была сделана попытка загрузить программу с неправильным форматом.

Решение работает отлично на Windows XP с обычной USB-сканера, однако пока пытался сканировать с помощью сетевого сканера (обнаруженным с помощью ScanGear инструмент) на ОС Windows 7 (x64) выше встречается.

C# Код:

private void startscan() 
     { 

      try 
      { 

       CommonDialogClass dailog = new CommonDialogClass(); 
       ImageFile imgfile = (ImageFile)dailog.ShowAcquireImage(WiaDeviceType.ScannerDeviceType, WiaImageIntent.UnspecifiedIntent, WiaImageBias.MaximizeQuality, 
       FormatID.wiaFormatJPEG, true, true, false); 
       string firstname = DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString(); 
       string name = scantxtfname.Text.Trim() + ".jpeg"; 


       string filenamepath = ConfigurationManager.ConnectionStrings["scanfilepath"].ConnectionString.ToString() + firstname + name; 

       scanfile.Add(name); 
       firstint.Add(Convert.ToInt32(firstname)); 
       SaveImageToPNGFile(imgfile, filenamepath); 



       FileStream stream = new FileStream(filenamepath, FileMode.Open, FileAccess.Read); 

       stream.Close(); 

       DataTable dt = new DataTable(); 

       dt.Columns.Add("Scaned Files", typeof(string)); 

       datagridscanedfiles.DataSource = null; 

       for (int i = 0; i < scanfile.Count; i++) 
       { 
        DataRow r = dt.NewRow(); 
        r[0] = scanfile[i].ToString(); 
        dt.Rows.Add(r); 
       } 
       datagridscanedfiles.DataSource = dt; 
       datagridscanedfiles.Visible = true; 
       int ln = scanfile.Count; 

       pictureBox1.ImageLocation = filenamepath; 

      } 
      catch (Exception d) 
      { 

       MessageBox.Show(d.Message); 
      } 


     } 


private static void SaveImageToPNGFile(ImageFile image, string fileName) 
     { 
      try 
      { 
       ImageProcess imgProcess = new ImageProcess(); 
       object convertFilter = "Convert"; 
       string convertFilterID = imgProcess.FilterInfos.get_Item(ref convertFilter).FilterID; 
       imgProcess.Filters.Add(convertFilterID, 0); 
       SetWIAProperty(imgProcess.Filters[imgProcess.Filters.Count].Properties, "FormatID", WIA.FormatID.wiaFormatJPEG); 
       image = imgProcess.Apply(image); 
       image.SaveFile(fileName); 
      } 
      catch (Exception er) 
      { 

       MessageBox.Show(er.Message); 
      } 

     } 

    private static void SetWIAProperty(IProperties properties, object propName, object propValue) 
     { 
      Property prop = properties.get_Item(ref propName); 

      prop.set_Value(ref propValue); 
     } 

Пожалуйста, подсказывают, как я могу разрешить выше проблемы?

ответ

0

Убедитесь, что вы не строите проект как «Любой процессор». Он должен быть x86. Компонент WIA COM не может работать в режиме 64 бит.

+0

когда win приложения работают с x86, он работает нормально .... спасибо ... –

0

Я когда-либо встречался с этой проблемой, и даже больше проект не может быть скомпилирован успешно на платформе X64. поскольку компонент WIA COM не может быть вызван в режиме x64, я, в конце концов, обратился к другому: завершите свой код WIA в одном приложении, а затем используйте другой процесс для вызова этого приложения сканирования из основного приложения. Я думаю, что это не лучшее решение, но, по крайней мере, это хорошо работает, ха-ха.