__uuidof能否用作静态常量C字符串?(微软特定技术问询)
问题解答
不行,你写的代码会直接编译报错,原因如下:
__uuidof(MyGuidClass)在MSVC编译环境中返回的是**const GUID&**类型,而LPCWSTR是指向宽字符的指针,两者类型完全不兼容,编译器会抛出类型不匹配的错误。
如果要把类关联的UUID转换成宽字符串存入数组,可以用微软提供的StringFromGUID2 API完成转换,示例代码如下:
#include <guiddef.h> #include <objbase.h> class DECLSPEC_UUID("31A0884B-2B2F-4243-B4A0-2AEFE11FDD68") MyGuidClass; // UUID字符串含连字符共36个字符,加终止符需要37个wchar_t的缓冲区 wchar_t guidBuffer[37] = {0}; static LPCWSTR kstrKeys[] = { StringFromGUID2(__uuidof(MyGuidClass), guidBuffer, _countof(guidBuffer)), };
StringFromGUID2会把GUID转换成xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx格式的宽字符串,成功时返回指向缓冲区的指针,失败则返回nullptr。如果需要完全静态初始化的字符串,也可以在程序启动阶段提前完成转换并存储到静态变量中。
内容的提问来源于stack exchange,提问作者c00000fd
相关产品推荐
相关产品推荐

