[引子] 在C#程序员的字典中,COM Interop意味着在C#代码中,调用COM。由于COM一度拥有着广泛的使用者,所以存在着很多COM组件。当开发者们迁徙到C#之后,如何重用这些COM组件,就是COM Interop要解决的问题。
[方法] 当手捧一个COM组件后,需要分三步完成一个最简单的COM interop
- 使用tlbimp产生一个.net的dll模块(称为Interop Assembly)
- 在C#代码中使用COM里面的类(或接口)
- 在编译的时候,引用(reference)在第1步中生成的dll
[例子] 手捧一个COM组件,可以用oleview一探究竟
oleview h2
.
dll
可以看到COM组件里面的CoClass,和Interface
图1 oleview看COM
这里我们看到CoClass Adder实现Interface IAdder, 其中有一个函数AddTwoNumber,输入参数有2,一个[in],潜台词是调用者把值传入,该函数不会(不能)修改这个变量;第二个参数是[OUT],潜台词是,调用者传参的时候不需要考虑这个参数的值,该函数会为这个变量赋值。熟悉C++的看官肯定知道,这里要指针或者引用出马了。
第1步:TlbImp
tlbimp h2