Bagikan melalui


Tentang Pustaka Dynamic-Link

Penautan dinamis memungkinkan modul untuk hanya menyertakan informasi yang diperlukan untuk menemukan fungsi DLL yang diekspor pada waktu pemuatan atau waktu proses. Penautan dinamis berbeda dari penautan statis yang lebih akrab, di mana linker menyalin kode fungsi pustaka ke dalam setiap modul yang memanggilnya.

Jenis Penautan Dinamis

Ada dua metode untuk memanggil fungsi dalam DLL:

  • Dalam penautan dinamis waktu muat, modul melakukan panggilan eksplisit ke fungsi DLL yang diekspor seolah-olah itu adalah fungsi lokal. Ini mengharuskan Anda untuk menautkan modul dengan pustaka impor untuk DLL yang berisi fungsi. Pustaka impor menyediakan sistem dengan informasi yang diperlukan untuk memuat DLL dan menemukan fungsi DLL yang diekspor saat aplikasi dimuat.
  • Dalam penautan dinamis run-time, modul menggunakan fungsiLoadLibrary atauLoadLibraryEx untuk memuat DLL pada waktu proses. Setelah DLL dimuat, modul memanggil fungsiGetProcAddress untuk mendapatkan alamat fungsi DLL yang diekspor. Modul memanggil fungsi DLL yang diekspor menggunakan pointer fungsi yang dikembalikan oleh GetProcAddress. Ini menghilangkan kebutuhan akan pustaka impor.

DLL dan Manajemen Memori

Setiap proses yang memuat DLL memetakannya ke ruang alamat virtualnya. Setelah proses memuat DLL ke alamat virtualnya, proses dapat memanggil fungsi DLL yang diekspor.

Sistem mempertahankan jumlah referensi per proses untuk setiap DLL. Saat utas memuat DLL, jumlah referensi bertambah satu. Ketika proses berakhir, atau ketika hitung referensi menjadi nol (hanya selama penautan dinamis saat run-time), DLL dikeluarkan dari ruang alamat virtual proses.

Fungsi DLL yang diekspor, seperti fungsi apa pun lainnya, berjalan dalam konteks utas yang memanggilnya. Oleh karena itu, kondisi berikut berlaku:

  • Alur thread proses yang memanggil DLL dapat menggunakan handle yang dibuka oleh fungsi DLL. Demikian pula, pegangan yang dibuka oleh utas apa pun dari proses pemanggilan dapat digunakan dalam fungsi DLL.
  • DLL menggunakan tumpukan utas panggilan dan ruang alamat virtual proses panggilan.
  • DLL mengalokasikan memori dari ruang alamat virtual proses panggilan.

Untuk informasi selengkapnya tentang DLL, lihat topik berikut ini: