【问题标题】:Driver, COMException errors驱动程序,COMException 错误
【发布时间】:2014-11-04 14:03:12
【问题描述】:

我正在使用以下代码扫描文档:

Dim manager = New DeviceManager
Dim deviceinfo = manager.DeviceInfos.Cast(Of DeviceInfo)().FirstOrDefault(Function(di) di.Properties("Name").Value = deviceName)
If deviceinfo Is Nothing Then Exit Sub
Dim device As Device = deviceinfo.Connect

Dim dlg = New CommonDialog

Dim Item As Item = device.Items(1)
Item.Properties("Bits Per Pixel").Value = 1
Item.Properties("Horizontal Resolution").Value = 200
Item.Properties("Vertical Resolution").Value = 200

Dim img As ImageFile = dlg.ShowTransfer(Item, FormatID.wiaFormatTIFF, False)

在最后一行,我收到 2 个不同的错误代码。有时我会收到0x8021000E,根据this 页面,这意味着WIA_ERROR_EXCEPTION_IN_DRIVER 错误。

有时我得到 COMException The remote procedure call failed 0x800706BE

根据this页面,驱动程序错误默认记录到%windir%\wiadebug.log,但我没有在那里找到任何日志文件。我确实在%windir%\debug\wiatrace.log 找到了一个似乎包含此信息的文件。但它并没有给我任何比实际错误更多的信息。

程序在 Windows 7 Professional 64 位上运行。 WIA 服务正在运行。

我可以采取哪些步骤来解决此问题?

【问题讨论】:

  • 请确保您在其上运行的线程是 STA 线程,即您在 WPF 或 Winforms 应用程序中获得的那种。除此之外,从设备制造商处获取驱动程序更新是避免这种情况的唯一希望。
  • 另外,检查参数并确保 (1) 所有参数都对您的设备有效,并且 (2) 您不必初始化任何您不是的参数。有些设备不遵守规则。
  • @HansPassant 我最初是使用 Task.Run 完成一项任务。现在我同步运行它,我一直得到 COMException。
  • @xpda 如何验证我需要初始化什么以及是否支持这些属性?

标签: vb.net wia


【解决方案1】:

1) 我引用了 WIA DLL,就好像它不是系统 COM DLL,而是外部 DLL。更改此解决了 COM 异常。

2) WIA 驱动程序异常显然是因为我将分辨率值显式设置为 200。没有它,扫描会正常进行。

this page 上,建议将 DPI 设置为 150,或设置为 300 或更高,并且某些扫描仪的 DPI 小于 300 存在问题。(我会在检查后更新此答案。 )

【讨论】:

    猜你喜欢
    • 2022-01-28
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 2013-08-27
    • 2014-10-24
    • 1970-01-01
    相关资源
    最近更新 更多