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"
この場合に著者が使用したのですか?
よろしく、アンドレイ