エクスポート方式の使い分け

方法 2 .def ファイルまたは __declspec(dllexport) のキーワードの関数をエクスポートできます。どの方法は、DLL により適しているかを判断するには、次の事項を検討する:

  • より多くの関数をエクスポート後で計画しますか。

  • DLL は、ビルドし直すことができる場合は、使用されるアプリケーションによってのみ使用されますアプリケーション、第三者によって作成されたアプリケーションでリビルド例ではできない、または。

.def ファイルを使う場合のの使用

.def ファイルを使って関数をエクスポート序数を制御できます。DLL にエクスポート関数を追加すると、そのほかのエクスポート関数よりも高い順序の値を再配置できます。この場合、暗黙的リンクを使用するアプリケーションは、新しい関数を含むインポート ライブラリとリンクし直す必要はありません。これは、新しい機能を追加し、既に依存するアプリケーションで正しく動作し続けることを確認できるため、多くのアプリケーションで使用する DLL をデザインするための非常に便利です。たとえば、MFC DLL に .def ファイルを使用してプロジェクトをビルドします。

.def ファイルを使うもう一つの利点は、関数をエクスポートする NONAME の属性を使用できます。これは、DLL のエクスポート テーブル内の序数のみを設定します。複数のエクスポート関数がある NONAME の属性を使用して DLL では、DLL ファイルのサイズを小さくできます。モジュール定義文を記述する方法の詳細について モジュール定義ステートメントに関する規則を参照してください。順序のエクスポートについては、名前ではなく序数値による DLL 関数のエクスポートを参照してください。

.def ファイルを使用する場合の短所は、. C++ ファイルの関数をエクスポートし、Visual C++ コンパイラでされる名前の装飾を避けるには、.def ファイルに装飾名を設定したり、extern "B" 15 を使用してエクスポート関数を定義する必要があります。

設定の装飾名 .def ファイル) は、[DUMPBIN] のツールまたはリンカーの [/MAP] のオプションを使用して、を取得できます。コンパイラが作成した装飾名はコンパイラ固有です。; したがって、.def ファイルにコンパイラが作成した装飾名を指定する場合、DLL とリンクするアプリケーションは、コンパイラと同じバージョンのを使用して呼び出し元のアプリケーションの装飾名が DLL の .def ファイルのエクスポート名に一致するようにビルドする必要があります。

__declspec(dllexport) を使う場合の利点と欠点

__declspec(dllexport) を使用して、.def ファイルを管理し、エクスポート関数の装飾名の取得を考慮する必要がないので便利です。ただし、エクスポートこの方法の有効性はリンク アプリケーションの数によってリビルド意思がであることです。新しいエクスポートで DLL をビルドし直すと、そのビルドし直すとためにコンパイラの別のバージョンを使用する場合、エクスポートされた C++ 関数の装飾名が変更されている可能性があるため、アプリケーションをビルドし直す必要があります。

900axts6.collapse_all(ja-jp,VS.110).gif目的に合ったトピックをクリックしてください

900axts6.collapse_all(ja-jp,VS.110).gifさらに詳しくは次のトピックをクリックしてください

参照

概念

DLL からのエクスポート