背景
我有IDL file定义了一些struct
,如此
typedef[uuid(68D81983-793D-43BE-AC16-C74254C90607)] struct Foo
{
// some members
} Foo;
编译时(使用Visual Studio 2013),它会生成一个.h
文件,其中相应的struct
被转换为
typedef /* [uuid] */ DECLSPEC_UUID("68D81983-793D-43BE-AC16-C74254C90607") struct Foo
{
// some members
} Foo;
宏DECLSPEC_UUID
扩展为
#define DECLSPEC_UUID(x) __declspec(uuid(x))
问题
如何在其他位置检索此struct
的UUID?
在包含生成的标头后,我尝试使用__uuidof
static const auto idFoo = __uuidof(Foo);
但后来我收到了编译错误
error C2787: 'Foo' : no GUID has been associated with this object
答案 0 :(得分:0)
问题似乎是尝试同时宣布和typedef
struct
。
typedef[uuid(68D81983-793D-43BE-AC16-C74254C90607)] struct Foo
{
// some members
} Foo;
解决方案是声明struct
,然后单独typedef
。然后__uuidof
无问题地工作。
[uuid(68D81983-793D-43BE-AC16-C74254C90607)] struct Foo
{
// some members
};
typedef struct Foo Foo;