Bagikan melalui


Tentang Pustaka Dynamic-Link

Penautan dinamis memungkinkan modul untuk hanya menyertakan informasi yang diperlukan untuk menemukan fungsi DLL yang diekspor pada waktu muat atau durasi. Penautan dinamis berbeda dari penautan statis yang lebih akrab, di mana tautan 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 mereka 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 fungsi LoadLibrary atau LoadLibraryEx untuk memuat DLL pada durasi. Setelah DLL dimuat, modul memanggil fungsi GetProcAddress untuk mendapatkan alamat fungsi DLL yang diekspor. Modul memanggil fungsi DLL yang diekspor menggunakan penunjuk 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 ini dapat memanggil fungsi DLL yang diekspor.

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

Seperti fungsi lainnya, fungsi DLL yang diekspor berjalan dalam konteks utas yang memanggilnya. Oleh karena itu, kondisi berikut berlaku:

  • Utas proses yang disebut DLL dapat menggunakan handel yang dibuka oleh fungsi DLL. Demikian pula, handel yang dibuka oleh utas apa pun dari proses panggilan 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: