DEFINE_GUID
来源:互联网 发布:nginx log 路径 编辑:程序博客网 时间:2024/06/06 00:47
来自:http://blog.sina.com.cn/s/blog_7d1dc9de0100z7hg.html
DEFINE_GUID宏是怎么工作的?
使用DEFINE_GUID宏可以让你通过包含同一个头文件来定义GUID值而不必使用extern关键词。比如,你的工程中有三个源文件:src1.cpp,src2.cpp,src3.cpp,它们都使用一个相同的GUID值,而为了保证一致性,这个GUID只能在你的工程中定义一次,这时,其它的源文件必须定义外部引用来使用它。用了DEFINE_GUID,你可以使用在所有源文件中包含同一个头文件,在头文件中这样定义GUID:
DEFINE_GUID(CLSID_MyObject,
0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
这个例子中GUID为0,实际编程中请用Guidgen工具来产生一个GUID,在其中的一个源文件中,在你的头文件前包含initguid.h,如:
// Src1.cpp
#include <Initguid.h>
#include "MyGuids.h"
// Src2.cpp
#include "MyGuids.h"
// Src3.cpp
#include "MyGuids.h"
在没有包含Initguid.h的地方,DEFINE_GUID宏创建外部引用来使用GUID值,在包含Initguid.h的地方,DEFINE_GUID重定义DEFINE_GUID宏以产生GUID的定义。
如是没有在任何地方添加Initguid.h,你会得到一个链接错误:"unresolved external symbol." ,如果同样的GUID包含Initguid.h两次,会得到编译错误"redefinition; multiple initialization."要解决这些问题,请确认Initguid.h只包含一次。同样的,不要包含Initguid.h到预编译头文件中去,因为预编译头文件会被每个源文件包含
DEFINE_GUID的作用
- #ifndef
DEFINE_GUID - #error
initguid: must include objbase.h first. - #endif
- #undef
DEFINE_GUID - #ifdef
_MAC - #define
__based(a) - #endif
- #ifdef
_WIN32 - #define
__based(a) - #endif
- #ifdef
__TURBOC__ - #define
__based(a) - #endif
- #ifndef
_MAC - #define
DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) / -
EXTERN_C const GUID "_CODE"))__based(__segname( 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 name / -
= { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } - #endif
上面是initguid.h的源代码
The GUID value must be defined exactly once in your project, and the other source files must declare extern references to it。
Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier)
GUID/UUID是通过特定算法产生的一个二进制长度为128位的数字,
在空间上和时间上具有唯一性,保证同一时间不同地方产生的数字不同,
在公元3400年以前产生的UUID/GUID与任何其他产生过的UUIDs/GUIDs都不相同。
在需要GUID的时候,可以完全由算法自动生成,不需要一个权威机构来管理。
GUID的长度固定,并且相对而言较短小,非常适合于排序、标识和存储。
- DEFINE_GUID
- DEFINE_GUID
- DEFINE_GUID
- DEFINE_GUID的作用
- DEFINE_GUID link error 解决
- LNK2001 unresolved external" DEFINE_GUID
- DEFINE_GUID使用引发的连接错误
- *DEFINE_GUID宏与#include 的使用
- DEFINE_GUID宏是怎么工作的?
- 用DEFINE_GUID定义过的,为什么连接时会说error LNK2001: unresolved external symbol
- 跨平台的 iOS,Android 在线游戏或应用如何实现?
- margin,border,padding,content
- 页面滑动切换(类Launcher滑动屏幕实现)
- Android Audio 数据流详解
- ExtJS4新发现12_CheckboxSelectionModel单选和复选的限定
- DEFINE_GUID
- JQuery Multi Select With Two ListBox
- 夏宇闻教授谈FPGA工程师的入门学习
- JavaSE第四十一讲:LinkedList源代码深入剖析
- 对2-3-4树的简单想法
- 服务器端 js 利用JavaScript开发事件驱动的Web应用 – node.js简介
- set history size
- tomcat server.xml中文版
- IOS-弹出框实现 官方UIAlertView的动画