Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah cara saya Mengeksport Fungsi C DLL dan Mengelakkan Nama Dihiasi/Dihancurkan?
Mencipta C DLL dan mengeksport fungsinya adalah tugas biasa. Walau bagaimanapun, menentukan cara nama yang dieksport kelihatan boleh mengelirukan.
Apabila mengeksport fungsi menggunakan fail Definisi Modul (MyDLL.def), anda mungkin memerhatikan nama yang dihias atau hancur seperti " SomeFunction@@@23mangledstuff#@@@@". Ini berlaku kerana pengkompil C menghiasi simbol fungsi dengan menambahkan maklumat yang diperlukan oleh masa jalan C.
Mengeksport fungsi menggunakan sintaks "C" __declspec(dllexport) luaran tidak tidak menghilangkan nama yang dihias. Ia hanya menyatakan bahawa fungsi harus mempunyai nama gaya C, tetapi hiasan kekal.
Untuk mengurangkan isu, pertimbangkan untuk menggunakan arahan pragma:
#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")
Pragma ini mengarahkan pemaut untuk mengeksport "SomeFunction" dengan nama berhias yang ditentukan.
Sebagai alternatif, anda boleh menggunakan pragma berikut dalam badan fungsi:
#pragma comment(linker, "/EXPORT:\"" __FUNCTION__ "\"=\"" __FUNCDNAME__ "\"")
Pragma ini menggunakan makro FUNCTION dan FUNCDNAME untuk mendapatkan semula nama fungsi dan nama yang dihias secara automatik.
Dengan menggunakan pragma ini, anda boleh mengawal hiasan simbol yang dieksport, memastikan keserasian apabila memanggilnya daripada bahasa lain seperti C#.
Atas ialah kandungan terperinci Bagaimanakah cara saya Mengeksport Fungsi C DLL dan Mengelakkan Nama Dihiasi/Dihancurkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!