dllexport、dllimport
Microsoft 固有の仕様 →
dllexport および dllimport ストレージ クラス属性は C および C++ 言語への Microsoft 固有の拡張機能です。 それらの属性を使用すると、関数、データ、オブジェクトを DLL との間でエクスポートおよびインポートできます。
__declspec( dllimport ) declarator
__declspec( dllexport ) declarator
解説
これらの属性は、DLL のクライアント (実行可能ファイルまたは別の DLL) に対する DLL のインターフェイスを明示的に定義します。 関数を dllexport として宣言すると、少なくともエクスポートした関数の指定には、モジュール定義 (.def) ファイルが不要になります。 dllexport 属性は __export キーワードに置き換わるものです。
クラスを declspec(dllexport) とマークした場合、そのクラス階層内のクラス テンプレートの特殊化は暗黙的に declspec(dllexport) とマークされます。 つまり、クラス テンプレートが明示的にインスタンス化され、クラスのメンバーの定義が必要になります。
関数を dllexport とマークすると、その関数は装飾名で公開されます。 C++ の関数の場合、この処理には名前のマングルが含まれます。 extern "C" として宣言されている C の関数や機能の場合、この処理には呼び出し規約に基づいたプラットフォーム固有の装飾が含まれます。 名前の装飾が不要な場合は、.def ファイル (EXPORTS キーワード) を使用します。
dllexport または dllimport を宣言するときは、拡張属性構文と __declspec キーワードを使用する必要があります。
使用例
// Example of the dllimport and dllexport class attributes
__declspec( dllimport ) int i;
__declspec( dllexport ) void func();
または、コードをより読みやすくするために、マクロ定義を使用できます。
#define DllImport __declspec( dllimport )
#define DllExport __declspec( dllexport )
DllExport void func();
DllExport int i = 10;
DllImport int j;
DllExport int n;
詳細については、次のトピックを参照してください。
END Microsoft 固有の仕様