• COM包装(COM Wrappers)


         为了实现传统的COM程序与.NET程序之间的相互调用,.NET提供了两个包装类:运行时可调用包装(runtime callable wrapper,RCW)和COM可调用包装(COM callable wrapper,CCW)。每当一个.NET客户程序调用一个COM对象的方法时就会创建一个RCW对象;相反,每当一个COM客户程序调用一个.net对象的方法时就会创建一个CCW对象.

    1.运行时可调用包装(RCW)

       公共语言运行时通过名为运行时可调用包装(RCW)的代理来公开COM对象。虽然RCW在.net客户端看起来是普通的对象,但他的主要功能是封装在.Net客户端和COM对象之间传递的调用。

    RCW的主要功能:

    (1)RCW实际上是runtime生成的一个.Net类,它包装了COM组件的方法,并内部实现对COM组件的调用。

    (2)列集(marshal).Net客户与COM对象之间的调用,列集的对象包括方法的参数,返回值等,比如c#中的string与COM中的BSTR之间的转换。

    (3)CLR为每个COM对象创建一个RCW,与对象上的引用数无关,就是说每个COM对象有且只会有一个RCW对象。

    (4)RCW中包含了COM对象的接口指针,并管理COM对象的引用计数。RCW自身的释放通过Garbage Collection机制管理。

         无论一个COM对象存在多少个引用,运行时只为每个COM对象创建一个RCW。运行时只为每个对象维护一个每进程的RCW。如果在一个应用程序域或单元中创建RCW,然后将引用传递至另外一个应用程序域或单元,则会使用第一个对象的代理。如图对于公开INew和INewer接口的COM对象,任意数目的托管客户端都可以持有引用。

         利用从类型库中导出的元数据,运行时将创建所调用的COM对象和该对象的包装。每个RCW都会在它所包装的COM对象上维护一个接口指针缓存,并且在不再需要RCW时释放它对该COM对象的引用。运行时对RCW执行垃圾回收。

    2.COM可调用包装

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

  • 相关阅读:
    crowd在更改IP后无法登录的问题
    VMware虚拟机中为Linux 添加虚拟硬盘(VirtualBox方法类似)
    虚拟机virtualbox中挂载新硬盘
    下载谷歌浏览器(Chrome)扩展离线安装包crx文件最简单的方法
    Chrome神器Vimium快捷键学习记录
    Chrome好用的扩展插件
    虚拟内存,MMU/TLB,PAGE,Cache之间关系
    ARM“庖丁解牛”之存储器管理单元MMU
    MMU——存储器管理单元
    我的vim配置---jeffy-vim-v2.3.tar
  • 原文地址:https://www.cnblogs.com/lxGIS/p/3565413.html
Copyright © 2020-2023  润新知