骆驼空间站

简单就是美,不受任何商业的驱使,我们有自己的圈子

博客园 首页 新随笔 联系 订阅 管理
.NET Framework 开发人员指南 
COM 可调用包装 

当 COM 客户端调用一个 .NET 对象时,公共语言运行库将创建托管对象以及该对象的 COM 可调用包装 (CCW)。由于无法直接引用 .NET 对象,COM 客户端会将 CCW 用作托管对象的代理。

运行库只为每个托管对象创建一个 CCW,而不管有多少个 COM 客户端在请求其服务。如下图所示,对于公开 INew 接口的 CCW,多个 COM 客户端可以持有引用。而该 CCW 又对实现接口的托管对象持有单个引用,并且会进行垃圾回收。COM 和 .NET 客户端可以同时对同一托管对象发出请求。

通过 COM 可调用包装来访问 .NET 对象
COM 可调用包装

COM 可调用包装对于在 .NET Framework 中运行的其他类来说是不可见的。它们的主要用途是封送在托管和非托管代码之间传递的调用;但是,CCW 还管理对象标识及其包装的托管对象的对象生存期。

对象标识

运行库从其垃圾回收堆中为 .NET 对象分配内存,这样,运行库就可以在必要时将对象在内存中来回移动。与之相对,运行库从非回收堆中为 CCW 分配内存,从而使 COM 客户端可以直接引用该包装。

对象生存期

与它所包装的 .NET 客户端不同,CCW 以传统的 COM 方式来进行引用计数。当 CCW 上的引用计数达到零时,该包装将释放它对托管对象的引用。在下一次垃圾回收循环中,将回收无剩余引用的托管对象。

posted on 2006-06-01 21:46  骆驼SPACE  阅读(295)  评论(0)    收藏  举报