获取struct的UUID

时间:2017-05-26 17:36:35

标签: c++ visual-c++ com uuid

背景

我有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

1 个答案:

答案 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;