【发布时间】:2012-10-22 09:15:20
【问题描述】:
我读了 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"?
最好的问候, 安德烈
【问题讨论】: