Delphi memanggil DLL VC
Eksternal “C” void __declspec(dllexport) __stdcall ShowMess(HWND hwnd, char* mess);
Format keluarannya adalah: _ShowMess@8, "8" adalah jumlah byte parameter fungsi
Untuk menghindari perpecahan nama, metode berikut dapat digunakan untuk menyelesaikan masalah:
1. Jangan menambahkan __stdcall dalam pernyataan dan menggunakan format default VC __cdecl. Namun, di Delphi, Anda harus menunjukkan bahwa format panggilan adalah cdecl.
2. Tambahkan file def di proyek VC, seperti:
PERPUSTAKAAN
EKSPOR
PertunjukanMess@1
Maka nama fungsi keluaran di DLL tidak terpecah.
Prosedur ShowMess (h:HWND; mess:PChar);
Jika tidak ada pernyataan Stdcall atau Cdecl, Delphi defaultnya adalah format panggilan Register(FastCall).
#paket pragma(4)
//definisi struktur
#paket pragma()
TDump.exe - disediakan oleh Delphi 4 dan C++ Builder 3
Impdef.exe dan Implib.exe - disediakan oleh C++ Builder 3
DumpBin.exe-disediakan oleh VC5.0
Lib.exe-disediakan oleh VC5.0
VC memanggil DLL Delphi
Fungsi ShowDialog( hMainWnd:THandle; Pesan:PChar ):integer;
Nama tidak dipisahkan saat dikeluarkan ke file Dll.
eksternal "C" __declspec(dllimport) int __stdcall ShowDialog( HWND hwnd,char* Pesan );
. Jika __stdcall disertakan, nama fungsi terkait dalam file Lib harus dipisahkan. Langkah-langkah berikut dapat digunakan untuk menghasilkan file Lib:
. Gunakan Impdef.exe untuk menghasilkan file def dalam format: Nama file impdef def, nama file dll
. Sesuaikan parameter file def secara manual, seperti mengubah ShowDialog menjadi ShowDialog@8
. Gunakan Lib.exe untuk menghasilkan file lib dalam format: Lib /def:def nama file
. Jika tidak ada __stdcall dalam pernyataan tersebut, format panggilan default masih stdcall, tetapi pemisahan nama tidak diperlukan. Gunakan file batch berikut MkLib.bat untuk menghasilkan file Lib:
@gema mati
jika %1.==
impdef %1.def %1.dll
lib /def:%1.def
pergi ke akhir
:kesalahan
gema Penggunaan: MkLib DllName
echo Catatan: Jangan tambahkan ekstensi ".dll" ke parameter "DllName"
:akhir