在《COM技术内幕》中,对GUID的声明和定义采用了这种方式://Header File: IFACE.Hextern "C"
{
extern const IID IID_IX;
extern const IID IID_IY;
}
//End IFACE.H
//CPP File: GUIDS.CPP
extern "C"
{
extern const IID IID_IX =
{ 0x56c66890, 0x7c5e, 0x470d,
{ 0x93, 0x14, 0xcf, 0x98, 0xe, 0x78, 0xd0, 0x72 }
};
extern const IID IID_IY =
{ 0xe7ae2ab5, 0xe0cd, 0x4740, { 0x8c, 0x8d, 0x15, 0xf9, 0x9, 0x52, 0x56, 0x13 } };
};
//End Cpp请问,为什么在头文件中使用 extern "C" 声明了接口GUID后,在CPP文件定义该接口GUID时,还要加 extern "C"修饰?这是什么意思?另外在extern "C"{extern variable = {}; }中,大括号里面的“extern”起什么作用呢?
在线等答复。
{
extern const IID IID_IX;
extern const IID IID_IY;
}
//End IFACE.H
//CPP File: GUIDS.CPP
extern "C"
{
extern const IID IID_IX =
{ 0x56c66890, 0x7c5e, 0x470d,
{ 0x93, 0x14, 0xcf, 0x98, 0xe, 0x78, 0xd0, 0x72 }
};
extern const IID IID_IY =
{ 0xe7ae2ab5, 0xe0cd, 0x4740, { 0x8c, 0x8d, 0x15, 0xf9, 0x9, 0x52, 0x56, 0x13 } };
};
//End Cpp请问,为什么在头文件中使用 extern "C" 声明了接口GUID后,在CPP文件定义该接口GUID时,还要加 extern "C"修饰?这是什么意思?另外在extern "C"{extern variable = {}; }中,大括号里面的“extern”起什么作用呢?
在线等答复。
那本书里dll部分有详细讲解。
而定义
iid的 const可以单独使用
但我在其它工程里试的时候,在头文件中用extern声明一个变量,再在cpp中定义出来,即可,不必在定义时再加extern修饰啊。
奇怪,望有人说清楚。
{ 0x56c66890, 0x7c5e, 0x470d,
{ 0x93, 0x14, 0xcf, 0x98, 0xe, 0x78, 0xd0, 0x72 } 这个是变量的定义。extern const IID IID_IX; 这个是变量的声明,在头文件中,其他文件使用该变量包含该头文件即可。
extern "C" 表示采用C的变量、函数命名方式编译C++程序;如果不加,则按照C++方式进行编译,就会进行C++方式的名称转换。
因为这里不涉及接口部分,完全可以不用extern "C",采用extern就好了