__declspec(dllimport) を使ったアプリケーションへのインポート
あるプログラムが DLL によって定義されたパブリック シンボルを使うことを、シンボルをインポートすると言います。 ビルドに DLL を使用するアプリケーション用のヘッダー ファイルを作成するときは、パブリック シンボルの宣言で __declspec(dllimport)
を使用します。 キーワード __declspec(dllimport)
は、エクスポートに .def ファイルと __declspec(dllexport)
キーワードのどちらを使用した場合でも機能します。
コードを読みやすくするには、__declspec(dllimport)
に対してマクロを定義して、そのマクロを使用してインポートされる各シンボルを宣言します。
#define DllImport __declspec( dllimport )
DllImport int j;
DllImport void func();
関数の宣言での __declspec(dllimport)
の使用は省略可能ですが、このキーワードを使用すると、コンパイラによって生成されるコードがより効率的になります。 ただし、インポートする実行可能ファイルで DLL のパブリック データ シンボルとオブジェクトにアクセスする場合は、__declspec(dllimport)
を使用する必要があります。 DLL を使う場合は、引き続きインポート ライブラリとリンクする必要があることに注意してください。
DLL とクライアント アプリケーションには、同じヘッダー ファイルを使うことができます。 こうする場合は、DLL のビルドとクライアント アプリケーションのビルドの区別を示すために、専用のプリプロセッサ シンボルを使います。 次に例を示します。
#ifdef _EXPORTING
#define CLASS_DECLSPEC __declspec(dllexport)
#else
#define CLASS_DECLSPEC __declspec(dllimport)
#endif
class CLASS_DECLSPEC CExampleA : public CObject
{ ... class definition ... };