GUID

它实际上是组件和接口的标识号

static const IID IID_IX = {

0x1ee235bd, 0x2e73, 0x49c2, 0xa5, 0x7c, 0x8b, 0xe5, 0x96, 0x92, 0x7e, 0xa2};

实际上IID是一个128比特(16字节)的一个GUID结构。GUID是英文Globally Unique Identifier(全局唯一标识符)的首字母缩写.

GUID 的声明和定义

之前是两个文件(Iface.h和GUDIS.cpp)来声明和定义GUID的。若希望用一条语句来声明并定义GUID,可以用使用OBJBASE.H中的定义的DEFINE_GUID宏。

如下:

// {6EF6377B-6150-462e-84FF-5B3FD43A9954}

DEFINE_GUID(IID_IX,

0x6ef6377b, 0x6150, 0x462e, 0x84, 0xff, 0x5b, 0x3f, 0xd4, 0x3a, 0x99, 0x54);

在文件guiddef.h可以看到这样一个定义:

#ifdef INITGUID

#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \

EXTERN_C const GUID DECLSPEC_SELECTANY name \

= { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }

#else

#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \

EXTERN_C const GUID FAR name

#endif // INITGUID

可以看出如果定义了INITGUID。 DEFINE_GUID 将是一个定义,否则只是声明。

或者直接包含 #include <InitGuid.h> 它的主要内容是:

#define INITGUID
#include <guiddef.h>

将GUID作为组件标识符

CoCreateInstance将使用一个GUID而不是一个串来标识组件。在COM中用以标识组件的GUID被称作是类标识符。为将类标识符同IID区别开来,与类标识符相应的类型为 。

通过引用传递GUID值

若不想输入const IID&则可以使用等价的REFIID。类似地,在传递类标识符时,可以使用REFCLSID,而在传递GUID值时,可以使用REFGUID

本文地址:http://www.cnblogs.com/fangyukuan/archive/2010/06/10/1755916.html

COM笔记-关于GUID的更多相关文章

  1. 使用ABAP批量下载有道云笔记中的图片

    Jerry喜欢用有道云笔记这款软件做自己的知识管理和知识体系的构建. 当您看到一篇好的有道云笔记分享时,可能会想将其精美的图片下载到本地.作为程序猿,我们不会去手动一张张下载.写个程序帮我们自动下载吧 ...

  2. Dynamic CRM 2015学习笔记(3)oData 查询方法及GUID值比较

    本文将比较二种查询字符串在同一个oData查询方法中的不同,另外,还将介绍如何比较不同方法返回的GUID的值. 用同一个oData查询方法,如果传入查询的字符串不一样,返回结果的格式竟然完全不一样. ...

  3. C#中使用GUID的笔记

    GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.通常平台会提供生成GUID的API.生成算法很有意思,用到了以太网卡地址.纳秒级时间.芯片ID码和许多可 ...

  4. View Controller Programming Guid for iOS 笔记

    1.View Controller 基础 1.1 View Controller 分类 ViewController分为container view controller 和content view ...

  5. CloudNotes之桌面客户端篇:笔记撰写样式的支持

    最近在CloudNotes桌面客户端中新增了笔记撰写样式的功能.当用户新建笔记的时候,可以在输入笔记标题的同时,选择笔记撰写样式,由安装包默认提供的样式主要有默认样式(Default).羊皮纸样式(L ...

  6. 《C#本质论》读书笔记(16)构建自定义集合

    16.1 更多集合接口 集合类(这里指IEnumerable层次结构)实现的接口层次结构 16.1.1 IList<T>与IDictionary<TKey,TValue> 字典 ...

  7. 【转】COM技术内幕(笔记)

    COM技术内幕(笔记) COM--到底是什么?--COM标准的要点介绍,它被设计用来解决什么问题?基本元素的定义--COM术语以及这些术语的含义.使用和处理COM对象--如何创建.使用和销毁COM对象 ...

  8. 开发笔记:基于EntityFramework.Extended用EF实现指定字段的更新

    今天在将一个项目中使用存储过程的遗留代码迁移至新的架构时,遇到了一个问题——如何用EF实现数据库中指定字段的更新(根据UserId更新Users表中的FaceUrl与AvatarUrl字段)? 原先调 ...

  9. Mongodb Manual阅读笔记:CH3 数据模型(Data Models)

    3数据模型(Data Models) Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mon ...

随机推荐

  1. dp 套 dp扯谈

    1.[扯谈概念] \(dp\) 套 \(dp\) 其实也就是 \(dp\) . 这里就定义下面两个概念: 内层 \(dp\) 表示的是被套在里面的那个 \(dp\) 外层 \(dp\) 表示的是最外面 ...

  2. Shell编程之条件语句:if、case语句

    Shell编程之条件语句:if.case语句               一.条件测试                1)test命令测试                2)整数值比较         ...

  3. ES6新增语法(一)——let、const、var的区别

    ES6简介 ES6是ECMAScript 6.0的简称,是javascript语言的下一代标准,已经在2015年6月正式发布上线.目的就是为了统一javascript的语法标准,可以用来开发大型应用程 ...

  4. Javascript闭包解析----------------v客学院技术分享

    跟java,php等编程语言一样,javascript也采用词法作用域,简单的来说就是函数的执行依赖于变量的作用域,这个作用域是在函数定义时决定的,而不是函数调用时决定的.为了实现这种词法作用域,还必 ...

  5. 关于java.lang.IllegalMonitorStateException异常说明(四)

    1.异常原因及解释 首先你要了解这个异常为什么会抛出,这个异常会在三种情况下抛出:1>当前线程不含有当前对象的锁资源的时候,调用obj.wait()方法;2>当前线程不含有当前对象的锁资源 ...

  6. 图像旋转的FPGA实现(一)

    继续图像处理专题,这次写的是图像旋转.若要说小分辨率的图像旋转倒也简单,直接将原始图像存储在BRAM中,然后按照旋转后的位置关系取出便是.但是对于高分辨的图像(720P及以上)就必须得用DDR3或者D ...

  7. FactoryBean简介以及Mybatis-Spring应用

    一.BeanFactory和FactoryBean区别? BeanFactory是工厂类,提供了获取和检索Bean的接口.它代表着Spring的IoC容器,负责Bean实例化以及管理Bean之间的依赖 ...

  8. SQL Server常用的几个存储过程

    1. sp_helptext 查看一些数据库对象的定义,比如存储过程.函数.试图等. 2. sp_who或者sp_who2 查看SQL Server数据库会话信息.比如是否被阻塞.

  9. 比POSTMAN更好用!在国产接口调试工具APIPOST中使用Mock

    APIPOST可以让你在没有后端程序的情况下能真实地返回接口数据,你可以用APIPOST实现项目初期纯前端的效果演示,也可以用APIPOST实现开发中的数据模拟从而实现前后端分离.在使用APIPOST ...

  10. 小白学习Vue第五天(v-model实用的地方)

    用法一radio单选项 <!-- 添加name男女选项互斥 --> <label for="male"> <input type="radi ...