Bagikan melalui


Mengekspor dari DLL Menggunakan __declspec(dllexport)

Anda dapat mengekspor data, fungsi, kelas, atau fungsi anggota kelas dari DLL menggunakan __declspec(dllexport) kata kunci. __declspec(dllexport) menambahkan direktif ekspor ke file objek sehingga Anda tidak perlu menggunakan file .def.

Kenyamanan ini paling jelas ketika mencoba mengekspor nama fungsi C++ yang dihiasi. Karena tidak ada spesifikasi standar untuk dekorasi nama, nama fungsi yang diekspor mungkin berubah di antara versi kompilator. Jika Anda menggunakan __declspec(dllexport), mengkompilasi ulang DLL dan file .exe dependen hanya diperlukan untuk memperhitungkan perubahan konvensi penamaan apa pun.

Banyak direktif ekspor, seperti ordinal, NONAME, dan PRIVATE, hanya dapat dibuat dalam file .def, dan tidak ada cara untuk menentukan atribut ini tanpa file .def. Namun, menggunakan __declspec(dllexport) selain menggunakan file .def tidak menyebabkan kesalahan build.

Untuk mengekspor fungsi, __declspec(dllexport) kata kunci harus muncul di sebelah kiri kata kunci konvensi panggilan, jika kata kunci ditentukan. Contohnya:

__declspec(dllexport) void __cdecl Function1(void);

Untuk mengekspor semua anggota data publik dan fungsi anggota di kelas, kata kunci harus muncul di sebelah kiri nama kelas sebagai berikut:

class __declspec(dllexport) CExampleExport : public CObject
{ ... class definition ... };

Catatan

__declspec(dllexport) tidak dapat diterapkan ke fungsi dengan __clrcall konvensi panggilan.

Saat membuat DLL, Anda biasanya membuat file header yang berisi prototipe fungsi dan/atau kelas yang Anda ekspor dan tambahkan __declspec(dllexport) ke deklarasi dalam file header. Untuk membuat kode Anda lebih mudah dibaca, tentukan makro untuk __declspec(dllexport) dan gunakan makro dengan setiap simbol yang Anda ekspor:

#define DllExport   __declspec( dllexport )

__declspec(dllexport) menyimpan nama fungsi dalam tabel ekspor DLL. Jika Anda ingin mengoptimalkan ukuran tabel, lihat Mengekspor Fungsi dari DLL menurut Ordinal Daripada berdasarkan Nama.

Apa yang ingin Anda lakukan?

Apa yang ingin Anda ketahui lebih lanjut?

Lihat juga

Mengekspor dari DLL