Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengeksport Semua Simbol daripada DLL dalam Visual Studio Tanpa Menggunakan Fail Makro atau .def?

Bagaimanakah Saya Boleh Mengeksport Semua Simbol daripada DLL dalam Visual Studio Tanpa Menggunakan Fail Makro atau .def?

Patricia Arquette
Patricia Arquetteasal
2024-11-25 22:48:10929semak imbas

How Can I Export All Symbols from a DLL in Visual Studio Without Using Macros or .def Files?

Mengeksport Semua Simbol Secara Automatik dalam DLL Tanpa Makro atau Fail .def

Dalam Visual Studio 2005, anda boleh mengeksport semua simbol daripada DLL tanpa menambah __declspec(dllexport) atau mencipta fail .def secara manual. Ini dicapai melalui langkah berikut:

Menggunakan CMake (Disyorkan)

  • Pasang CMake versi 3.3.20150721-g9cd2f atau lebih tinggi, yang termasuk "Eksport Semua" ciri.
  • Tambah baris set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) ke fail CMakeLists.txt anda.
  • Buat projek Visual Studio menggunakan CMake.
  • Kompilasi projek dan semua simbol akan dieksport secara automatik.

Nota: Apabila menggunakan kaedah ini, pastikan bahawa /GL (Pengoptimuman Seluruh Program) tidak didayakan.

Menghuraikan Fail .obj

  • Buat atur cara untuk menghuraikan fail .obj dan mengekstrak simbol yang dieksport .
  • Kumpulkan maklumat seperti konvensyen panggilan, medan simbol dan luaran/statik maklumat.
  • Janakan fail .def dengan simbol yang diekstrak.
  • Pautkan DLL menggunakan fail .def.

Walaupun kaedah ini memerlukan usaha tambahan, ia memberikan fleksibiliti dalam menghuraikan fail .obj.

Tambahan Petua

  • Gunakan makro __declspec(dllexport) atau __cdecl eksport untuk fungsi C untuk menghapuskan gangguan nama.
  • Gunakan perpustakaan statik untuk mengeksport simbol, kemudian huraikan dan ekstraknya untuk gunakan dalam fail .def.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengeksport Semua Simbol daripada DLL dalam Visual Studio Tanpa Menggunakan Fail Makro atau .def?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn