C#与COM组件集成及诊断工具详解
1. C#与COM组件集成
1.1 COM与C#对象的绑定
COM与C#之间的互操作通过早期绑定或晚期绑定实现。早期绑定允许在编译时使用已知类型进行编程,而晚期绑定则通过动态发现来使用类型,在C#端使用反射,在COM端使用IDispatch。
- 从C#调用COM程序 :早期绑定通过为COM对象及其接口提供程序集形式的元数据来实现。TlbImp.exe工具可以将COM类型库转换为程序集中的等效元数据。使用生成的程序集,就可以像操作其他C#对象一样实例化和调用COM对象的方法。
- 从COM调用C#程序 :早期绑定通过类型库实现。TlbExp.exe和RegAsm.exe工具可以从程序集生成COM类型库,然后可以在支持通过类型库进行早期绑定的工具(如Visual Basic 6)中使用该类型库。
1.2 向C#公开COM对象
实例化COM对象时,实际上是在使用一个名为运行时可调用包装器(Runtime Callable Wrapper,RCW)的代理。RCW负责管理COM对象的生命周期,并将对其调用的方法转换为对COM对象的适当调用。当垃圾回收器终结RCW时,它会释放对其所持对象的所有引用。如果需要在不等待垃圾回收器终结RCW的情况下释放COM对象,可以使用System.Runtime.InteropServices.Marshal类型的静态ReleaseComObject方法。
以下是一个使用C#通过COM互操作更改MSN即时通讯工具友好名称的示例: