WEB开发网
开发学院软件开发VC 接触VC之四:COM组件模型基础 阅读

接触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万不远了。

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:接触 VC COM

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接