COM组件的两个重要需求:
1。 动态链接
2。 隐藏实现细节
COM初步探索
一个典型C++客户和组件的例子
在COM中,推荐使用接口的指针来使用组件,上面客户端可以改成如下工作:
接下来问题是:
1。 CA* pA = new CA ;
这里暴露太多细节,最起码客户需要类CA的头文件声明,这里把类CA的内部细节(私有成员)都暴露了,
而且当CA的实现细节改动,客户端肯定需要重新编译代码。
另外COM组件可能不在客户进程中,甚至在远程机器上,这样就不可能简单new出组件实例。
2。delete pA ;
这里需要显示释放组件。
但pIX和pIY也指向pA的对象,delete pA后如果再使用pIX等就会发生错误。
容易造成代码维护困难。
解决方案是所有接口派生自IUnknown。
IUnknown提供QueryInterface,AddRef和Release接口。
另外提供函数CreateInstance。
对于上面问题1,通过CreateInstance创建组件,并返回IUnknown接口指针,
然后通过QueryInterface再获取各种接口的指针。
对于上面问题2,每次获取组件指针时(自动)调用AddRef,该指针不再使用时调用Release。
组件内部维护引用计数,当计数为0时自动释放自己。这样就不需要手动new和delete了。
现在组件和客户代码如下:
COM学习笔记1_COM初步探索
最新推荐文章于 2022-08-24 17:05:34 发布