Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengeksport Fungsi C DLL tanpa Hiasan Nama?

Bagaimana untuk Mengeksport Fungsi C DLL tanpa Hiasan Nama?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-27 16:07:14901semak imbas

How to Export C   DLL Functions without Name Decoration?

Pengeksportan Nama Dihiasi C DLL

Anda perasan bahawa apabila mengeksport nama fungsi daripada C DLL menggunakan sama ada Definisi Modul (.def) fail atau sintaks luaran "C" __declspec(dllexport) gaya C, nama fungsi yang dieksport dihiasi dengan maklumat tambahan. Ini disebabkan oleh C name mangling, proses yang mengekod maklumat tentang parameter dan jenis fungsi ke dalam nama fungsi.

Untuk mengalih keluar hiasan tambahan ini, anda boleh menggunakan arahan pengkompil ulasan #pragma. Dengan menambahkan baris berikut pada kod anda:

#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")

Anda boleh menentukan nama berhias untuk fungsi yang ingin anda eksport. Dalam kes ini, "SomeFunction@@@23mangledstuff#@@@@" ialah nama yang dihias untuk fungsi "SomeFunction."

Sebagai alternatif, anda boleh menggunakan pragma berikut untuk menjana nama yang dihias secara automatik:

#pragma comment(linker, "/EXPORT:\"" __FUNCTION__ ""= "" __FUNCDNAME__)

Pragma ini menggunakan FUNGSI dan Makro FUNCDNAME untuk memasukkan nama fungsi dan versi hiasannya ke dalam pragma.

Menggunakan salah satu pragma ini akan menghasilkan output berikut apabila dilihat dengan dumpbin.exe:

SomeFunction

Kaedah ini membolehkan anda mengekalkan kefungsian fungsi yang dieksport sambil mengalih keluar hiasan yang tidak diingini dalam fungsi tersebut nama.

Atas ialah kandungan terperinci Bagaimana untuk Mengeksport Fungsi C DLL tanpa Hiasan Nama?. 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