接触VC之四:COM组件模型基础
2006-07-19 11:36:48 来源:WEB开发网核心提示: 总之,一个组件对象外部特征是由不同的接口也就是这些虚类所组成,接触VC之四:COM组件模型基础(7),它们向使用者展现组件所提供的功能,注:如果你的C++虚函数没学得不太好的话,假如你真的发现了GUID有冲突的话(你要保证这不是人为),建议你赶去买彩票吧,那么请找一本C++语法书再看一看.
总之,一个组件对象外部特征是由不同的接口也就是这些虚类所组成,它们向使用者展现组件所提供的功能。
注:如果你的C++虚函数没学得不太好的话,那么请找一本C++语法书再看一看. 或请参看VCKBASE第12期的《解析动态联编》。
2) 标识符(GUID)
上面,我说过COM组件是基于二进制的。那么要我们使用签名(比如说类名、接口名)来指定一个组件显然是不理想的了(至少在识别方面会有些麻烦)。那么,既然是二进制系统最方便当然就是使用数字标识了。于是,微软定义了这么一个结构标准:
typedef struct _GUID
{
DOWRD Data1;
WORD Data2;
WORD Data3;
WORD Data4[8];
}GUID;
结构用来储存一些数字信息,来表识一个COM对象,接口以及其它COM元素。这个结构体就叫做标识符。
在C++中一个标识符是这么表示的:
extern "C" const GUID CLISID_MYSPELLCHECKER =
{0x54bf6567, 0x1007, 0x11d1, {0xb0, 0xaa, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}
同样的标识符在其它非C环境中是这么表示的:
{54bf6567-1007-11d1-b0aa-444553540000}
这个标识符代表着一个COM对象,这是因为一个COM对象的标识符名都以CLISID_为前缀。接口名则是以IID_为前缀。不要问我,标识符定义与对象具体有什么关系式。我不知道。它们根本就没有什么关系的。一个COM对象在编写时,我们会使用随机的方法来确定它的标识符(这个工作可以由VC来帮我们搞定)。一旦COM对象得到一个标识符并发布出去的话,那么就不能更改了。另外,不要担心GUID会有所冲突。如果你的高中数学已经及格了的话,那么请算一算128位二进制中,重复的概率会有多少。假如你真的发现了GUID有冲突的话(你要保证这不是人为),建议你赶去买彩票吧。你离500万不远了。
更多精彩
赞助商链接