Pembuatan pustaka tautan dinamis
Untuk membuat pustaka Dynamic-link (DLL), Anda harus membuat satu atau beberapa file kode sumber, dan mungkin file linker untuk mengekspor fungsi. Jika Anda berencana untuk mengizinkan aplikasi yang menggunakan DLL Anda untuk menggunakan penautan dinamis waktu muat, Maka Anda juga harus membuat pustaka impor.
Membuat file sumber
File sumber untuk DLL berisi fungsi dan data yang diekspor, fungsi dan data internal, dan fungsi titik masuk opsional untuk DLL. Anda dapat menggunakan alat pengembangan apa pun yang mendukung pembuatan DLL berbasis Windows.
Jika DLL Anda dapat digunakan oleh aplikasi multithreaded, maka Anda harus membuat DLL Anda "aman utas". Untuk menghindari kerusakan data, Anda harus menyinkronkan akses ke semua data global DLL. Anda juga harus memastikan bahwa Anda hanya menautkan dengan pustaka yang juga aman untuk utas. Misalnya, Microsoft Visual C++ berisi beberapa versi Pustaka Run-time C, yang tidak aman untuk utas dan dua di antaranya.
Mengekspor fungsi
Cara Anda menentukan fungsi mana dalam DLL yang harus diekspor tergantung pada alat yang Anda gunakan untuk pengembangan. Beberapa kompilator memungkinkan Anda mengekspor fungsi langsung dalam kode sumber dengan menggunakan pengubah dalam deklarasi fungsi. Di lain waktu, Anda harus menentukan ekspor dalam file yang Anda teruskan ke linker.
Misalnya, menggunakan Visual C++, ada dua cara yang mungkin untuk mengekspor fungsi DLL: dengan pengubah __declspec(dllexport) atau dengan file definisi modul (.def
). Jika Anda menggunakan pengubah __declspec(dllexport), maka tidak perlu menggunakan .def
file. Untuk informasi selengkapnya, lihat Mengekspor dari DLL.
Membuat pustaka impor
File pustaka impor (.lib
) berisi informasi yang dibutuhkan linker untuk menyelesaikan referensi eksternal ke fungsi DLL yang diekspor, sehingga sistem dapat menemukan dll yang ditentukan dan fungsi DLL yang diekspor pada run-time. Anda dapat membuat pustaka impor untuk DLL saat membuat DLL.
Untuk informasi selengkapnya, lihat Membangun pustaka impor dan mengekspor file.
Menggunakan pustaka impor
Misalnya, untuk memanggil fungsi CreateWindow , Anda harus menautkan kode Anda dengan pustaka User32.lib
impor . Alasannya adalah bahwa CreateWindow berada di DLL sistem bernama User32.dll
, dan User32.lib
merupakan pustaka impor yang digunakan untuk menyelesaikan panggilan dalam kode Anda ke fungsi yang diekspor di User32.dll
. Linker membuat tabel yang berisi alamat setiap panggilan fungsi. Panggilan ke fungsi dalam DLL akan diperbaiki saat DLL dimuat. Saat sistem menginisialisasi proses, proses dimuat User32.dll
karena prosesnya tergantung pada fungsi yang diekspor di DLL tersebut, dan memperbarui entri dalam tabel alamat fungsi. Semua panggilan ke CreateWindow memanggil fungsi yang diekspor dari User32.dll
.
Untuk informasi selengkapnya, lihat Menautkan yang dapat dieksekusi ke DLL.