word格式-可编辑-感谢下载支持C++环境下按COM方式调用C#组件的方法1
互操作基础首先需要声明清楚的是:COM与
NET组件(准确的说,应该叫程序集,Assembly)是两个不同的概念
COM组件对象模型是微软早期的一种软件复用标准和技术方案,用IDL语言定义接口,用非托管语言(C++)定义类以实现接口功能,编译生成DLL组件,并生成相应的类型定义库TLB
NET程序集则是一种基于CLR的多编程语言无缝集成的软件封装技术
NET编程语言(C#,VB
NET)直接定义接口与类,能够简单生成程序集
编写源代码时按照一定的要求赋予GUID属性,生成DLL后注册到GAC即可实现共享复用
AlthoughCOMclientscancallcodethatisexposedinapublicclassby
NETservers,
NETcodeisnotdirectlyaccessibletoCOMclients
Inordertouse
NETcodefromaCOMclient,youneedtocreateaproxyknownasaCOMcallablewrapper(CCW)
COMCallableWrappers(COM包装)COM在以下几个重要方面与
NETFramework对象模型存在差异:生命周期(自己管理/CLR管理)、对象实例的获取(接口指针QueryInterface/反射)、内存的管理(位置不变/CLR调整)
CCW概览图通过运行时可调用包装(RCW)访问COM对象ManagedcodecomponentsnotonlydependontheCLR,theyrequirethecomponentswithwhichtheyinteracttodependontheCLR
BecauseCOMcomponentsdon'topera