2015-11-01 48 views
0

我正在试验WIA扫描,并看到包含“动态”输入和使用COM对象创建的C#代码示例,例如,Windows图像采集和COM

set Img = CreateObject("WIA.ImageFile") 

dynamic imageFile = dialog.ShowAcquireImage(
        WiaDeviceType.Scanner,... 

那是方法,因为例子是脚本语言(我不知道很多关于COM)?即如果我在WPF应用程序中使用它,我可以在没有任何问题的情况下使用WIA类,还是应该(我必须)使用COM?

ImageFile img = new ImageFile() 

谢谢。

回答

1

第一个片段是Basic,它肯定使用后期绑定。第二个片段是C#,它使用了一个非常古怪的混合,其中ImageFile返回类型是延迟绑定的,但“WiaDeviceType.Scanner”绝对看起来来自WIA类型库。一般来说,混合没有多大意义。你要么依赖于类型库,要么将其完全延迟。

类型库与.NET程序集中的元数据完全等价。它是COM组件支持的类型的机器可读描述。就像您使用Project> Add Reference添加对.NET程序集的引用一样,您可以对类型库执行完全相同的操作。您可以在COM选项卡中获得已注册类型库的列表。你会选择“Microsoft Windows Image Acquisition Library v2.0”。或者使用浏览按钮,类型库通常嵌入在DLL中,就像元数据嵌入在.NET程序集中一样,有时它是单独的.tlb文件。你会选择c:\ windows \ system32 \ wmp.dll。有时,您必须使用Tlbimp.exe自行转换类型库,这在转换生成警告时是必需的。

后期绑定COM服务器与在.NET中使用Reflection完全等价。在C#版本4之前,它看起来也很像反射,非常痛苦。它具有使用反射的所有缺点,您不会获得IntelliSense帮助,输入错误会产生运行时错误,并且在运行时效率低下。它有一个优点,同样一个Reflection,它对版本变化更有弹性。

当您使用WIA时,这不是一个非常有用的优势,它在过去的10年里一直保持稳定。微软曾经为Windows XP发布WIA v2的后端移植版本,但已停止使用。如果你仍然想支持XP,然后使用后期绑定,所以你仍然可以克隆WIA v1是一个选项。不要这样做。

长话短说,你一定会更喜欢使用Project> Add Reference。编写代码要容易得多,并且您不太可能需要处理难以解决的运行时错误。

+0

感谢您的回答!我只是想知道我没有失去一些根本性的东西。 – jqwha