COM是微软所有软件架构的基础,windows操作系统、office、vs开发工具、. net frameWork等都是以此为基础,Com是一项较复杂的技术,很长时间内它只能用C++ 编写,但有.net FrameWork后,编写COM 组件变得容易了。
http://www.codeproject.com/KB/vb-interop/csCom.aspx这里有一个很好的实例可供参考,但在Win7下此实例运行不了,有几点需要注意:
1.如果在接口定义时使用了[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]属性,C++的客户程序不能通过正常调用使用Com组件(comPtr->OneMethod()),只能通过IDispatch接口的Invoke()调用Com组件。用[InterfaceType(ComInterfaceType.InterfaceIsDual)]属性,双接口,可以保证C++客户端的正常调用。
2.AssemblyInfo.cs文件中的[ComVisble(false)]要改为true。使用SN工具生成密钥,对生成的Assembly使用强命名。
3.Vs2008中Project->Proporties->Build-> Register for Com选项在Win7下不起作用,不能将生成的Assembly注册到系统的Global Assembly Cache中,这导致Com管理器无法找到DLL文件。使用Regasm /tlb将DLL注册到注册表中,Gacutil /i 将Assembly放入 Global Assembly Cache。