7

多くの動的ライブラリを備えた巨大な C++マルチプロジェクト ソリューションを継承しましたが

__declspec(dllexport)

必ずしもdllexportを挿入する必要はありませんが(多くの作業が必要です)、代わりに対応する.dllに加えて.defファイルを使用できることを学びました。

hereから「DLL Hello World」プロジェクトをビルドし、ヘッダーからdllexportを削除してみるために、必死に失敗しました。すでに引用されたページの言葉で、私の重要な質問はどのように

"[..] use the .def file when building the DLL."

私の.defファイルは次のとおりです ( Addメソッドのみでコードを試します):

LIBRARY   MathFuncsDll
EXPORTS 
?Add@MyMathFuncs@MathFuncs@@SANNN@Z

Addメソッドをエクスポートするために Visual Studio 2010 で DLL をビルドするときに、どのように使用すればよいですか?

4

1 に答える 1

12

この問題の前に半日が経過した後、私は解決策を見つけました。ここで説明されています。

私自身の言葉を使用して、VS2010で.defファイルを使用してシンボル エクスポートのプロセスを再開するには:

  1. 動的ライブラリ (.dll) をコンパイルするように VS2010 に指示します。これは、ライブラリのプロジェクトのプロパティ ページで行います。
  2. 修飾された(装飾された) 名前を使用して、モジュール定義ファイル (.def) を作成します (少なくとも言語が C++ の場合) dllexportを使用すると、ここで説明されているように、エクスポート済みの .dll のシンボルを表示できます。まだ何もエクスポートしていない場合は、この投稿を参照してください。
  3. プロパティ ページのライブラリ定義に .def を追加します。
  4. コンパイル
  5. .exeなどの依存ファイルを開くことにより、たとえばDependency Walkerを使用して、作業の正確性を確認します。依存ファイルの下の依存関係ツリーに、コンパイルされたばかりのライブラリが表示されます。no red colorなどのエラーや警告は表示されません。

.defファイルに関してさらに質問がある場合は、 「モジュール定義ファイル」という用語を探してください。

于 2013-01-18T16:45:00.670 に答える