COM原理
+ -

COM 组件调用机制

2022-02-17 124 0

COM组件运行在分布式环境中 。于是,如何启动组件遇到了严重问题,看下段代码:

p = new 对象;
p->对象函数();
delete p;

样的代码在本地进程中运行不会有问题。但如果这个对象是在“地球另一边”的计算机上,结果会如何?
因此,启动组件、调用接口功能,当然由COM系统来实现了。
组件调用机制
由上图可看出,当调用组件时,其实是通过代理(运行在本地)和存根(运行在远端)之间的通讯完成的。

具体来说,客户程序通过CoCreateInstance启动组件时,代理接管该调用,它和存根通讯,存根则在本地执行new操作加载对象。对于初学者,可不用理它,代理和存根对使用者来说是透明的。只要知道大概是怎么一回事就OK。

这个远程对象何时销毁?在第二回介绍接口时,特意忽略了两个函数IUnknown::AddRef和IUnknown::Release,从函数名就能猜到,一个是对内部引用记数器(Ref)加1,一个是释放(减1),当记数器减为0时,就可释放。

其实,写程序时,比较简单,请遵守几个原则:

  1. 启动组件同时得到一个接口指针,或通过QueryInterface得到另一个接口指针后,不要调用AddRef。因为在获取指针时,系统内部已调用了AddRef函数;
  2. 当把接口指针赋值给(保存到)另一个变量时,请调用AddRef;
  3. 当不需要再使用接口指针时,务必执行Release释放;
  4. 使用智能指针时,可省略指针维护工作;

0 篇笔记 写笔记

COM 组件调用机制
COM组件运行在分布式环境中 。于是,如何启动组件遇到了严重问题,看下段代码:p = new 对象;p->对象函数();delete p;样的代码在本地进程中运行不会有问题。但如果这个对象是在“地球另一边”的计算机上,结果会如何?因此,启动组件、调用接口功能,当然由COM系统来实现了。......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!