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!