COM in plain C (1GUID)By Jeff Glatt

   
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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值