《COM 原理与应用》学习笔记 - 第一部分 COM原理

豆豆网   技术应用频道   2007年03月20日  【字号: 收藏本文

本文详细介绍《COM 原理与应用》学习笔记 - 第一部分 COM原理

  GUID 在 C/C++ 中可以用这样的结构来描述:

typedef struct _GUID
{
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} GUID;

  例:{64BF4372-1007-B0AA-444553540000} 可以如下定义一个 GUID:

extern "C" const GUID CLSID_MYSPELLCHECKER =
{ 0x54BF0093, 0x1048, 0x399D,
{ 0xB0, 0xA3, 0x45, 0x33, 0x43, 0x90, 0x47, 0x47} };

  Visual C++ 提供了两个程序生成 GUID: UUIDGen.exe(命令行) 和 GUIDGen.exe(对话框)。COM 库提供了以下 API 函数可以产生 GUID:

  HRESULT CoCreateGuid(GUID *pguid);

  如果创建 GUID 成功,则函数返回 S_OK,并且 pguid 将指向所得的 GUID 值。

  ---------------------------------------------------

  COM 对象

  ---------------------------------------------------

  在 COM 规范中,并没有对 COM 对象进行严格的定义,但 COM 提供的是面向对象的组件模型,COM 组件提供给客户的是以对象形式封装起来的实体。客户程序与 COM 程序进行交互的实体是 COM 对象,它并不关心组件模型的名称和位置(即位置透明性),但它必须知道自己在与哪个 COM 对象进行交互。

  ---------------------------------------------------

  COM 接口

  ---------------------------------------------------

  从技术上讲,接口是包含了一组函数的数据结构,通过这组数据结构,客户代码可以调用组件对象的功能。接口定义了一组成员函数,这组成员函数是组件对象暴露出来的所有信息,客户程序利用这些函数获得组件对象的服务。

  通常我们把接口函数表称为虚函数表(vtable),指向 vtable 的指针为 pVtable。对于一个接口来说,它的虚函数表是确定的,因此接口的成员函数个数是不变的,而且成员函数的先后先后顺序也是不变的;对于每个成员函数来说,其参数和返回值也是确定的。在一个接口的定义中,所有这些信息都必须在二进制一级确定,不管什么语言,只要能支持这样的内存结构描述,就可以使用接口。

责编:豆豆技术应用

正在加载评论...