随笔分类 - COM学习
Dale Rogerson的《Inside COM》和潘爱民老师的《COM原理与应用》读书笔记
摘要:在潘老师的《COM原理与应用》这本书里有一个字典组件例子程序很好的模拟实现了COM对象和接口的原理。下面就对这一程序做详细介绍和记录。 整个工程由一个DictComp组件程序(以dll方式提供服务)和一个客户程序DictCtrl(Win32 Console形式)组成。先来看组件程序DictComp。 这个组件程序主要实现两个接口,一个主要是提供单词的查询,插入和删除功能,另外一个是用来实现单词拼写的检查,分别定义在IDictionary.h和ISpellCheck.h两个头文件中。由前几篇可知,组件的所有接口都是由IUnknown这个接口继承而来的。所以首先来看这个接口的定义。代码如下:/..
阅读全文
摘要:COM的IUnknown接口 COM定义的每一个接口都必须从IUnknown继承过来,因为IUnknown接口提供了两个非常重要的特性:生存期控制和接口查询。当客户程完成对对象的操作后,应该将对象释放掉以提高资源利用率。IUnknown中引入了“引用计数”的方法可以有效控制对象的生存周期。另外一方面如果一个COM对象实现了多个接口,而客户程序一开始只拥有一个接口指针,这时就可以借助IUnknown的“接口查询”方法来完成接口之间的跳转。IUnknown的C++定义如下:class IUnknown{public: virtual HRESULT _stdcall QueryInterfa...
阅读全文
摘要:COM对象的标识——CLSID 客户程序不直接去访问COM组件,而是通过一个GUID进行对象的创建和初始化工作。COM规范采用了128位全局唯一标识符GUID。一个GUID的例子如下:{54BF6567-1007-11D1-B0AA-444553540000}在C/C++语言中可以用这样的结构描述:typedef struct _GUID{ DWORD Data1; WORD Data2; WORD Data3; BYTE Data4[8];}GUID; 于是前面的GUID例子可以定义为:extern “C” const GUID CLSID_MYFRISTCOMGUID ...
阅读全文
摘要:近日由于项目的需要,接触到从未深入了解过的COM技术,遂决定静下心来好好学习一番。废话不多说,开始COM之旅吧。 COM(Component Object Model)是由微软提出的组件标准。在COM标准中,一个组件程序也被称为一个模块,它可以是一个dll,被称作进程内组件;也可以是一个exe,被称作进程外组件。COM是以对象为基本单元的模型,一个组件程序可以包含一个或多个组件对象,程序和程序之间进行通信是靠组件对象来实现的,而组件程序(COM程序)是提供组件对象(COM对象)的代码载体。 COM对象不同于一般面向对象语言(如C++)中对象的概念,COM对象是建立在二进制可执行代码级的基础上.
阅读全文

浙公网安备 33010602011771号