Bagaimana untuk Mengeksport Fungsi C DLL tanpa Hiasan Nama?

Mary-Kate Olsen
Lepaskan: 2024-11-27 16:07:14
asal
814 orang telah melayarinya

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#@@@@")
Salin selepas log masuk

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__)
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan