Bagikan melalui


Memanggil Fungsi DLL dari Aplikasi Visual Basic

Untuk aplikasi Visual Basic (atau aplikasi dalam bahasa lain seperti Pascal atau Fortran) untuk memanggil fungsi dalam DLL C/C++, fungsi harus diekspor menggunakan konvensi panggilan yang benar tanpa dekorasi nama apa pun yang dilakukan oleh pengkompilasi

__stdcall membuat konvensi panggilan yang benar untuk fungsi (fungsi yang disebut membersihkan tumpukan dan parameter diteruskan dari kanan ke kiri) tetapi menghiasi nama fungsi secara berbeda. Jadi, ketika __declspec(dllexport) digunakan pada fungsi yang diekspor dalam DLL, nama yang didekorasi diekspor.

Dekorasi __stdcall nama mengawali nama simbol dengan garis bawah ( _ ) dan menambahkan simbol dengan karakter tanda (@) diikuti dengan jumlah byte dalam daftar argumen (ruang tumpukan yang diperlukan). Akibatnya, fungsi ketika dinyatakan sebagai:

int __stdcall func (int a, double b)

dihiasi seperti _func@12 dalam output.

Konvensi panggilan C (__cdecl) menghiasi nama sebagai _func.

Untuk mendapatkan nama yang didekorasi, gunakan /MAP. Penggunaan __declspec(dllexport) melakukan hal berikut:

  • Jika fungsi diekspor dengan konvensi panggilan C (__cdecl), fungsi akan menghapus garis bawah terkemuka ( _ ) saat nama diekspor.

  • Jika fungsi yang diekspor tidak menggunakan konvensi panggilan C (misalnya, __stdcall), fungsi mengekspor nama yang didekorasi.

Karena tidak ada cara untuk mengambil alih tempat pembersihan tumpukan terjadi, Anda harus menggunakan __stdcall. Untuk membatalkan kode nama dengan __stdcall, Anda harus menentukannya dengan menggunakan alias di bagian EKSPOR dari file .def. Ini ditampilkan sebagai berikut untuk deklarasi fungsi berikut:

int  __stdcall MyFunc (int a, double b);
void __stdcall InitCode (void);

Dalam . File DEF:

EXPORTS
   MYFUNC=_MyFunc@12
   INITCODE=_InitCode@0

Agar DLL dipanggil oleh program yang ditulis dalam Visual Basic, teknik alias yang ditunjukkan dalam topik ini diperlukan dalam file .def. Jika alias dilakukan dalam program Visual Basic, penggunaan alias dalam file .def tidak diperlukan. Ini dapat dilakukan dalam program Visual Basic dengan menambahkan klausa alias ke pernyataan Deklarasikan .

Apa yang ingin Anda ketahui lebih lanjut?

Baca juga

Membuat C/C++ DLL di Visual Studio