Heim > Backend-Entwicklung > C++ > Wie kann ich automatisch alle Symbole aus einer DLL in Visual Studio exportieren, ohne __declspec(dllexport)- oder .def-Dateien zu verwenden?

Wie kann ich automatisch alle Symbole aus einer DLL in Visual Studio exportieren, ohne __declspec(dllexport)- oder .def-Dateien zu verwenden?

Patricia Arquette
Freigeben: 2024-12-06 02:19:10
Original
617 Leute haben es durchsucht

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

Automatischer Symbolexport für DLLs ohne explizite Deklarationen

In Visual Studio 2005 können Sie alle Symbole automatisch aus einer DLL exportieren, ohne __declspec manuell hinzuzufügen (dllexport)-Attribute oder das Erstellen von .def-Dateien. So geht's:

Verwenden von CMake (empfohlen)

  1. Installieren Sie die neueste Entwicklungsversion von CMake (cmake-3.3.20150721-g9cd2f-win32-x86.exe). oder höher).
  2. Erstellen Sie ein CMake-Projekt mit CMakeLists.txt-Datei.
  3. Fügen Sie die folgende Zeile zur CMakeLists.txt-Datei hinzu:
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
Nach dem Login kopieren
  1. Generieren Sie das Visual Studio-Projekt mit CMake (cmake-gui) und kompilieren.

Vorteile:

  • Diese Methode erfordert keine expliziten Exportmakros in Klassen oder Funktionen.
  • Es macht die manuelle Erstellung von .def überflüssig Dateien.

Hinweis: Whole Program Optimization (/GL) kann mit diesem Ansatz nicht verwendet werden.

Erstellen einer .def-Datei mit Objektdateiinformationen

Als Alternative zum CMake-Ansatz können Sie wie folgt manuell eine .def-Datei erstellen Schritte:

  1. Erstellen Sie eine statische Bibliothek aus dem Code, den Sie exportieren möchten.
  2. Verwenden Sie dumpbin /LINKERMEMBER, um Exporte aus der statischen Bibliothek zu extrahieren.
  3. Parsen Sie die Ausgabe von dumpbin und erstellen Sie eine .def-Datei.
  4. Verknüpfen Sie die DLL mit der .def Datei.

Vorteile:

  • Ermöglicht eine genauere Kontrolle über den Symbolexport.

Nachteile:

  • Erfordert manuelle Erstellung einer statischen Bibliothek, Dumpbin-Analyse und Schreiben von .def-Dateien.
  • Ist möglicherweise nicht so effizient wie der CMake-Ansatz.

Zusätzliche Tipps:

  • Wenn Sie den Klassenexportansatz verwenden, fügen Sie __declspec(dllexport) oder extern „C“ hinzu. __declspec(dllexport) zur Klassen- oder Methodendeklaration.
  • Erwägen Sie die Verwendung von %2 anstelle von __cdecl in der .def-Datei, um die Kompatibilität mit älteren Versionen von Windows zu gewährleisten.
  • Stellen Sie sicher, dass die Einstellungen für die Namensverknüpfung vorhanden sind Konsistenz zwischen dem Code und der .def-Datei (falls manuell erstellt).

Das obige ist der detaillierte Inhalt vonWie kann ich automatisch alle Symbole aus einer DLL in Visual Studio exportieren, ohne __declspec(dllexport)- oder .def-Dateien zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage