gpt4 book ai didi

c++ - 如何初始化一个常量 CLSID

转载 作者:IT老高 更新时间:2023-10-28 23:18:22 24 4
gpt4 key购买 nike

类 ID (GUID) 通常由一系列用短划线分隔的十六进制数字指定,例如{557cf406-1a04-11d3-9a73-0000f81ef32e}。这不是可用于直接初始化 CLSID 结构的文字。

我发现了两种初始化结构的方法,但它们都有些笨拙。第一个不允许声明 const 并且必须在运行时完成,而第二个需要对十六进制常量进行大量重新格式化。

CLSID clsid1;
CLSIDFromString(CComBSTR("{557cf406-1a04-11d3-9a73-0000f81ef32e}"), &clsid1);

const CLSID clsid2 = { 0x557cf406, 0x1a04, 0x11d3, { 0x9a,0x73,0x00,0x00,0xf8,0x1e,0xf3,0x2e } };

我知道,如果您有一个与 UUID 关联的类型,Visual Studio 可以使用 __uuidof operator 自动生成一个。 .如果你只有十六进制字符串,有没有办法做到这一点?

最佳答案

静态 CLSID 从字符串初始化(不需要运行时转换助手):

class __declspec(uuid("{557cf406-1a04-11d3-9a73-0000f81ef32e}")) Foo;
static const CLSID CLSID_Foo = __uuidof(Foo);
// ...
CComPtr<IUnknown> pUnknown;
pUnknown.CoCreateInstance(CLSID_Foo);

或直接使用__uuidof(编译器会将GUID值视为常量并生成最少的必要代码):

class __declspec(uuid("{557cf406-1a04-11d3-9a73-0000f81ef32e}")) Foo;
// ...
CComPtr<IUnknown> pUnknown;
pUnknown.CoCreateInstance(__uuidof(Foo));

这没什么特别的:例如当类型库是 #import 时ed,使用相同的方法将 CLSID 附加到基于 coclass 的类型,然后如果 additionally requested 可能会生成额外的 CLSID_xxx 标识符.

关于c++ - 如何初始化一个常量 CLSID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29975918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com