Fungsi FreeLibrary (libloaderapi.h)
Membebaskan modul pustaka tautan dinamis (DLL) yang dimuat dan, jika perlu, mengurangi jumlah referensinya. Ketika jumlah referensi mencapai nol, modul dibongkar dari ruang alamat proses panggilan dan handel tidak lagi valid.
Sintaks
BOOL FreeLibrary(
[in] HMODULE hLibModule
);
Parameter
[in] hLibModule
Handel ke modul pustaka yang dimuat. LoadLibrary, LoadLibraryEx,
Fungsi GetModuleHandle, atau GetModuleHandleEx mengembalikan handel ini.
Menampilkan nilai
Jika fungsi berhasil, nilai yang dikembalikan bukan nol.
Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, panggil fungsi GetLastError .
Keterangan
Sistem mempertahankan jumlah referensi per proses untuk setiap modul yang dimuat. Modul yang dimuat pada inisialisasi proses karena penautan dinamis waktu muat memiliki jumlah referensi satu. Jumlah referensi untuk modul bertambah setiap kali modul dimuat oleh panggilan ke LoadLibrary. Jumlah referensi juga ditambahkan oleh panggilan ke LoadLibraryEx kecuali modul sedang dimuat untuk pertama kalinya dan sedang dimuat sebagai data atau file gambar.
Jumlah referensi diturunkan setiap kali fungsi FreeLibrary atau FreeLibraryAndExitThread dipanggil untuk modul. Ketika jumlah referensi modul mencapai nol atau proses berakhir, sistem akan membongkar modul dari ruang alamat proses. Sebelum membongkar modul pustaka, sistem memungkinkan modul untuk melepaskan dari proses dengan memanggil fungsi DllMain modul, jika memilikinya, dengan nilai DLL_PROCESS_DETACH. Melakukannya memberi modul pustaka kesempatan untuk membersihkan sumber daya yang dialokasikan atas nama proses saat ini. Setelah fungsi titik entri kembali, modul pustaka dihapus dari ruang alamat proses saat ini.
Tidak aman untuk memanggil FreeLibrary dari DllMain. Untuk informasi selengkapnya, lihat bagian Keterangan di DllMain.
Memanggil FreeLibrary tidak memengaruhi proses lain yang menggunakan modul yang sama.
Berhati-hatilah saat memanggil FreeLibrary dengan handel yang dikembalikan oleh GetModuleHandle. Fungsi GetModuleHandle tidak meningkatkan jumlah referensi modul, sehingga meneruskan handel ini ke FreeLibrary dapat menyebabkan modul dibongkar sebelum waktunya.
Utas yang harus membongkar DLL tempat dll dijalankan dan kemudian menghentikan dirinya sendiri harus memanggil FreeLibraryAndExitThread alih-alih memanggil FreeLibrary dan ExitThread secara terpisah. Jika tidak, kondisi balapan dapat terjadi. Untuk detailnya, lihat bagian Keterangan dari FreeLibraryAndExitThread.
Contoh
Misalnya, lihat Menggunakan Run-Time Dynamic Linking.
Persyaratan
Klien minimum yang didukung | Windows XP [aplikasi desktop | Aplikasi UWP] |
Server minimum yang didukung | Windows Server 2003 [aplikasi desktop | Aplikasi UWP] |
Target Platform | Windows |
Header | libloaderapi.h (termasuk Windows.h) |
Pustaka | Kernel32.lib |
DLL | Kernel32.dll |