__declspec(dllexport) を使った DLL からのエクスポート

__declspec(dllexport) キーワードを使用すると、データ、関数、クラス、クラスのメンバー関数を DLL からエクスポートできます。 __declspec(dllexport) では、オブジェクト ファイルにエクスポート ディレクティブが追加されるので、.def ファイルを使用する必要はありません。

この機能は、C++ 関数の装飾名をエクスポートする場合に特に便利です。 名前の装飾には標準仕様がないので、エクスポート関数の名前は、コンパイラのバージョン間で変わる場合があります。 __declspec(dllexport) を使用する場合は、名前付け規則の変更に対応するためだけに、DLL とその従属する .exe ファイルを再コンパイルする必要があります。

序数、NONAME、PRIVATE など、多くのエクスポート ディレクティブは、.def ファイル内にしか作成されないので、これらの属性を .def ファイルを使用せずに指定することはできません。 ただし、.def ファイルに加えて __declspec(dllexport) を使用すると、ビルド エラーが発生しません。

関数をエクスポートするには、呼び出し規則キーワードが指定されている場合、__declspec(dllexport) キーワードは呼び出し規則キーワードの左に記述します。 次に例を示します。

__declspec(dllexport) void __cdecl Function1(void);

クラス内のすべてのパブリック データ メンバーおよびメンバー関数をエクスポートするには、次のように、クラス名の左にキーワードを記述します。

class __declspec(dllexport) CExampleExport : public CObject
{ ... class definition ... };

Note

__declspec(dllexport) は、__clrcall 呼び出し規則を伴う関数には適用できません。

DLL のビルド時には通常、エクスポートする関数のプロトタイプやクラスを含むヘッダー ファイルを作成し、そのヘッダー ファイル内の宣言に __declspec(dllexport) を追加します。 コードを読みやすくするために、次のように __declspec(dllexport) 用のマクロを定義して、そのマクロをエクスポートする各シンボルに使用します。

#define DllExport   __declspec( dllexport )

__declspec(dllexport) では、関数名は DLL のエクスポート テーブルに格納されます。 テーブル サイズの最適化方法については、「名前ではなく序数値による DLL 関数のエクスポート」を参照してください。

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

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

関連項目

DLL からのエクスポート