C または C++ 言語の実行可能ファイルで使用する C 関数をエクスポートする
C で記述された DLL に関数がある場合は、プリプロセッサ マクロを使用して、C 言語と C++ 言語コードの両方から簡単にアクセスできます。 プリプロセッサ マクロは __cplusplus
、コンパイルされている言語を示します。 これを使用して、C++ 言語コードから呼び出されたときに C リンケージを持つ関数を宣言できます。 この手法を使用し、DLL のヘッダー ファイルを指定する場合、C と C++ のユーザーはこれらの関数を変更せずに使用できます。
次のコードは、C および C++ クライアント アプリケーションの両方で使用できるヘッダー ファイルを示しています。
// MyCFuncs.h
#ifdef __cplusplus
extern "C" { // only need to export C interface if
// used by C++ source code
#endif
__declspec( dllimport ) void MyCFunc();
__declspec( dllimport ) void AnotherCFunc();
#ifdef __cplusplus
}
#endif
場合によっては、C 関数を C++ 実行可能ファイルにリンクする必要がありますが、関数宣言ヘッダー ファイルでは上記の手法が使用されていません。 引き続き C++ から関数を呼び出すことができます。 C++ ソース ファイルで、コンパイラが #include
C 関数名を修飾できないようにディレクティブをラップします。
extern "C" {
#include "MyCHeader.h"
}