COM和.NET的互用性

作者: BUILDER.COM
Tuesday, January 14 2003 1:08 PM

 

.NET平台是来自早期COM的一个主要技术转换,COM已经统治微软世界好多年了。尽管现在可以使用.NET进行新的开发,但是仍然需要使用一些现有的以COM组件形式存在的功能。在本文中,我会谈到一些COM和.NET互用的技术。

COM到.NET:技术的转变

 
<script language="JavaScript1.1" src="http://ad.cn.doubleclick.net/adj/messagingplus.zdnet.com.cn/developer/webdevelop;sz=1x1;ord=1971954783?" type="text/javascript"> </script> <script language="VBScript" type="text/javascript"> on error resume next ShockMode = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.5"))) </script>

尽管COM组件和.NET组件共享相同的.dll扩展名,但是它们在本质上并不相同。.NET组件并不需要把和它相关的信息保存在注册表里,但是它会把类型信息以元数据的形式保存下来。这个元数据是放在组件自身里的。更进一步说,.NET组件不是基于IUnknown接口的,而所有的COM对象都会公开这个接口。

以COM形式存在的代码被叫做不可管理代码(unmanaged code),因为这个代码的执行不由通用语言运行库(CLR)管理。使用.NET框架编写的代码可以由CLR管理,所以被叫做可管理代码(managed code)。

重新编写.NET里的每一段代码是不切实际的,因为很多功能是以COM的形式存在的。而且当前以COM形式存在的代码要比.NET的更多,因为.NET是一个相对较新的平台。正是由于这个原因,要求COM和.NET互用性的呼声正在增多。.NET框架里已经有一个专门的命名空间用于这个目的:System.Runtime.InteropServices命名空间提供了一些能够用于从.NET访问COM的类。下面,我们将通过从.NET调用COM对象开始——这通常是个必需的行为。

从.NET里调用COM对象
COM对象里的代码并不由CLR执行。把COM对象向.NET公开的机制如下:COM对象在包装函数类内部被封装,这会把COM对象作为.NET组件向CLR公开。这个包装函数就是运行库可调用包装函数(RCW)。A说明了这个处理过程。

图A

运行库可调用包装函数(RCW)



这个包装函数类扮演着不可管理和可管理代码之间桥梁的角色,而且所有的操作都要通过这个类。理论讲够了;让我们看看怎么做到这一点。生成RCW的整个处理过程都是由Visual Studio.NET自动处理的。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值