A
GUID
我们继续我们的实现
IExample
为真正的
COM
对象。我们还没有写我们的
QueryInterface
,
AddRef
,
Release
函数。在实现这些函数之前。我们来讨论一下一个叫做
(GUID)
的东西。那么,它是什么呢?它是一个
16
字节的唯一数组,由一系列字节组成。当我说唯一的时候,指的是独一无二的。一个
GUID
不能
与存在其它的有相同的
GUID
,任何地方在地球上。任何
GUID
都有独一无二的
16
字节。
如何建立一个唯一的
16
个字节呢。您可以使用微软的实用工具
GUIDGEN.EXE
.
编译器或者
SDK
自了这个程序。运行这个程序。你会看到这个窗口:
你一运行
GUIDGEN,
它自动为你生成一个
GUID
,显示在结果对话框里。你看到的结果可能与此图不同,毕竟每个
GUID
都是与其它的不同的。你可以继续点击“新
GUID
”按钮以获得不同的
GUID
。(一些废话。。。没有翻译)
你可以点击“考贝”按钮将它传送到剪贴板里。并贴到任何地方(比如你的源代码里)下面是我贴出来的样子。
// {0B5B3D8E-574C-4fa3-9010-25B8E4CE24C2}
DEFINE_GUID(
<<
name
>>
, 0xb5b3d8e, 0x574c, 0x4fa3,
0x90, 0x10, 0x25, 0xb8, 0xe4, 0xce, 0x24, 0xc2);
你可以点击“考贝”按钮将它传送到剪贴板里。并贴到任何地方(比如你的源代码里)下面是我贴出来的样子。
// {0B5B3D8E-574C-4fa3-9010-25B8E4CE24C2}
DEFINE_GUID(
<<
name
>>
, 0xb5b3d8e, 0x574c, 0x4fa3,
0x90, 0x10, 0x25, 0xb8, 0xe4, 0xce, 0x24, 0xc2);
但我们必须使用
C
变量名替代
<<name>>
。这里我把它叫做
CLSID_IExample
.
// {0B5B3D8E-574C-4fa3-9010-25B8E4CE24C2}
DEFINE_GUID(CLSID_IExample, 0xb5b3d8e, 0x574c, 0x4fa3,
0x90, 0x10, 0x25, 0xb8, 0xe4, 0xce, 0x24, 0xc2);
现在我们有一个可供
IExmaple
使用的
GUID
了。
还需要为
IExample
's VTable
建立一个
GUID
,比如我们的
IExampleVtbl
struct
接口。所以继续点击新建
GUID
按钮。并考贝到其它地方。这次我用变量名
IID_IExample
代替
<<name>>
。我粘贴出来如下:
// {74666CAC-C2B1-4fa8-A049-97F3214802F0}
DEFINE_GUID(IID_IExample, 0x74666cac, 0xc2b1, 0x4fa8,
0xa0, 0x49, 0x97, 0xf3, 0x21, 0x48, 0x2, 0xf0);
总之,所有的COM对象需要一个GUID,它们的接口也需要一个GUID。