__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 ... };

目的に合ったトピックをクリックしてください

さらに詳しくは次のトピックをクリックしてください

参照

概念

アプリケーションへのインポート