GUID 在 C++:中的用法
本文关键字:用法 C++ GUID | 更新日期: 2023-09-27 17:59:33
我想问一下 GUID 在C++中的声明是否与 C# 不同。我在 C# 中遇到了这个问题:
GUID InterfaceClassGuid = {0x4d1e55b2, 0xf16f, 0x11cf, 0x88, 0xcb, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30};
这在C++可行吗?如果不是,如何转换?谢谢。
<windows.h>
中GUID
的定义与此语法兼容。它也适用于 C。
最简单(也方便(是利用 MS 特定的__declspec(uuid(...))
:
class __declspec(uuid("{C1F400A4-3F08-11D3-9F0B-006008039E37}")) NullRenderer;
GUID x = __uuidof(NullRenderer);
这样,您甚至不必在源代码中拆分 GUID 组件,而是将其作为真正的 GUID 声明。
标准C++中没有定义 GUID 类型。但是,您可以(也许某些编译器供应商已经(定义一个可以用相同方式初始化的struct GUID
。
编辑:Microsoft按如下方式定义 GUID:
typedef struct _GUID {
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} GUID;
使用此定义,您的代码应按原样工作。
GUID 结构与 C# 不同。它被定义
typedef struct _GUID
{
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data[8];
} GUID;
如果你想把它当作一个变量,你会这样做:
GUID guid = {0x4d1e55b2, 0xf16f, 0x11cf, {0x88, 0xcb, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30}};
试试看,也看这里:所以