DEFINE_GUID

来源:互联网 发布:广州qt场及js汇总 编辑:程序博客网 时间:2024/05/16 10:55

来自: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宏是怎么工作的

转自:http://blog.csdn.net/goalcn/article/details/5692658 

[cpp] view plaincopy
  1. #ifndef DEFINE_GUID  
  2. #error initguid: must include objbase.h first.  
  3. #endif  
  4. #undef DEFINE_GUID  
  5. #ifdef _MAC  
  6. #define __based(a)  
  7. #endif  
  8. #ifdef _WIN32  
  9. #define __based(a)  
  10. #endif  
  11. #ifdef __TURBOC__  
  12. #define __based(a)  
  13. #endif  
  14. #ifndef _MAC  
  15. #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) /  
  16.     EXTERN_C const GUID __based(__segname("_CODE")) name /  
  17.                     = { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }  
  18. #else  
  19. #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) /  
  20.     EXTERN_C const GUID name /  
  21.                     = { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }  
  22. #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的长度固定,并且相对而言较短小,非常适合于排序、标识和存储。



原创粉丝点击