2013-12-17 131 views
0

錯誤味精到掃描:無法使用WIA在Windows 7 X64的

無法加載文件或程序集「Interop.WIA,版本= 1.0.0.0,文化=中性公鑰=空」或一種其依賴。試圖加載格式不正確的程序。

解決方案工作正常的Windows XP與普通的USB掃描儀,但是 而試圖與網絡掃描儀(使用ScanGear時工具發現的)在Windows 7(64位)以上遇到掃描。

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

確保您沒有將項目構建爲「任何CPU」。它需要是x86。 WIA COM組件不能以64位模式運行。

+0

win應用程序與x86運行時,它運行良好....謝謝你... –

0

我遇到過這個問題,甚至更多的項目無法在X64平臺上成功編譯。由於無法在x64模式下調用WIA COM組件,因此最後我轉向另一種方式:在單個應用程序中完成WIA代碼,然後使用另一個Process從主應用程序調用此掃描應用程序。我認爲這不是最好的解決方案,但至少它運作良好,哈哈。

相關問題