我读了 Dale Rogerson 的书“Inside COM”。在第 5 章中,他写道(对不起,我翻译成英文):
extern "C"用于 C 链接。如果函数被标记为extern "C",编译器不会将函数的名称更改为其他名称,例如:
?CreateInstance@@YAPAUIUncnown@@XZ
.
这对我来说很清楚。但作者extern "C"
在其他地方进一步使用,并没有解释它的原因:
#include <objbase.h>
extern "C"
{
// {32bb8320-b41b-11cf-a6bb-0080c7b2d682}
extern const IID IID_IX =
{0x32bb8320, 0xb41b, 0x11cf,
{0xa6, 0xbb, 0x0, 0x80, 0xc7, 0xb2, 0xd6, 0x82}} ;
// {32bb8321-b41b-11cf-a6bb-0080c7b2d682}
extern const IID IID_IY =
{0x32bb8321, 0xb41b, 0x11cf,
{0xa6, 0xbb, 0x0, 0x80, 0xc7, 0xb2, 0xd6, 0x82}} ;
// {32bb8322-b41b-11cf-a6bb-0080c7b2d682}
extern const IID IID_IZ =
{0x32bb8322, 0xb41b, 0x11cf,
{0xa6, 0xbb, 0x0, 0x80, 0xc7, 0xb2, 0xd6, 0x82}} ;
// The extern is required to allocate memory for C++ constants.
}
它不是一个函数......为什么作者extern "C"
在这种情况下使用?
最好的问候,安德烈