ホームページ >バックエンド開発 >C++ >__declspec(dllexport) または .def ファイルを使用せずに、Visual Studio の DLL からすべてのシンボルを自動的にエクスポートするにはどうすればよいですか?

__declspec(dllexport) または .def ファイルを使用せずに、Visual Studio の DLL からすべてのシンボルを自動的にエクスポートするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-06 02:19:10602ブラウズ

How Can I Automatically Export All Symbols from a DLL in Visual Studio without Using __declspec(dllexport) or .def Files?

明示的な宣言を使用しない DLL の自動シンボル エクスポート

Visual Studio 2005 では、__declspec を手動で追加せずに、DLL からすべてのシンボルを自動的にエクスポートできます。 (dllexport) 属性または .def ファイルの作成。方法は次のとおりです。

CMake の使用 (推奨)

  1. CMake の最新開発バージョン (cmake-3.3.20150721-g9cd2f-win32-x86.exe) をインストールします。
  2. を作成します。 CMakeLists.txt ファイルを使用した CMake プロジェクト。
  3. 次の行を CMakeLists.txt ファイルに追加します。
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
  1. CMake を使用して Visual Studio プロジェクトを生成します (cmake) -gui)とコンパイル.

利点:

  • このメソッドは、クラスまたは関数で明示的なエクスポート マクロを必要としません。
  • .def を手動で作成する必要がなくなります。ファイル。

注: プログラム全体の最適化 (/GL) は、このアプローチでは使用できません。

オブジェクト ファイル情報を含む .def ファイルの作成

CMake アプローチの代わりに、.def ファイルを手動で作成できます。次の手順を使用します。

  1. エクスポートするコードから静的ライブラリを作成します。
  2. dumpbin /LINKERMEMBER を使用して、静的ライブラリからエクスポートを抽出します。
  3. dumpbin の出力を解析し、.def ファイルを作成します。
  4. .def を使用して DLL をリンクします。 file.

利点:

  • シンボルのエクスポートをより細かく制御できます。

欠点:

  • が必要です静的ライブラリの手動作成、dumpbin 解析、および .def ファイルの書き込み。
  • CMake アプローチほど効率的ではない可能性があります。

追加のヒント:

  • クラス エクスポート アプローチを使用する場合は、__declspec(dllexport) または extern を追加します。 "C" __declspec(dllexport) をクラスまたはメソッド宣言に追加します。
  • 古いバージョンの Windows との互換性を確保するために、.def ファイルで __cdecl の代わりに %2 を使用することを検討してください。
  • 名前がマングリング設定は、コードと .def ファイルの間で一貫しています (手動で作成された場合)。

以上が__declspec(dllexport) または .def ファイルを使用せずに、Visual Studio の DLL からすべてのシンボルを自動的にエクスポートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。