__declspec(dllimport) を使ったアプリケーションへのインポート
更新 : 2007 年 11 月
あるプログラムが 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 ... };