Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengubah Laluan Carian DLL untuk DLL Berpaut Statik Apabila DLL Tiada dalam Direktori Aplikasi?
Mengubah Laluan Carian DLL untuk DLL Terpaut Statik
Dilema:
Apabila memautkan secara statik DLL ke aplikasi, ia biasanya mencari DLL dalam direktori aplikasi. Walau bagaimanapun, dalam senario tertentu, DLL mungkin tidak terletak dalam direktori yang sama. Sebagai contoh, ia boleh berada dalam subfolder yang ditetapkan untuk "plugin."
Penyelesaian Kemungkinan:
1. Pautan Dinamik:
Pertimbangkan untuk menggunakan LoadLibrary() dan GetProcAddress() dan bukannya pemautan statik untuk mengakses kefungsian pemalam. Ini memberikan fleksibiliti yang lebih besar dalam memuatkan DLL dari lokasi yang ditetapkan.
2. Pengubahsuaian Pembolehubah Persekitaran:
Menambah laluan folder pemalam pada pembolehubah persekitaran PATH sistem memastikan DLL boleh dikesan dan dimuatkan dengan jayanya.
3. Mekanisme Pemuatan Kelewatan:
Gunakan mekanisme pemuatan kelewatan untuk menangguhkan pemuatan fungsi pemalam. Laksanakan fungsi pembantu tersuai yang memuatkan DLL menggunakan laluan yang disediakan.
4. Penciptaan Perhimpunan:
Ubah folder pemalam kepada himpunan dengan menjana fail .manifest di dalamnya. Tetapkan folder "plugin" sebagai perhimpunan bergantung dalam aplikasi. Ini mengarahkan carian DLL dalam folder pemalam.
5. Aplikasi Stub dan Pemuatan Dinamik:
Subbahagikan aplikasi kepada stub boleh laku dan komponen yang dimuatkan secara dinamik. Dalam stub boleh laku, gunakan SetDllDirectory untuk menunjukkan folder pemalam. Selepas itu, mohon LoadLibrary menghantar laluan lengkap ke fail "appstub.dll".
Petua Tambahan:
Menukar Folder menjadi Himpunan:
Untuk menukar direktori yang mengandungi DLL kepada himpunan, tambahkan fail bernama "[folder_name].manifest" pada folder dengan kandungan berikut:
<assembly manifestVersion="1.0"> <assemblyIdentity type="Win32" name="Plugins" version="1.0.0.0" processorArchitecture="x86" /> <file name="Plugin.dll"/> </assembly>
Arahan Pragma untuk Pemuatan DLL:
Dalam Visual Studio 7 atau lebih baru, gunakan arahan pragma berikut untuk mengarahkan aplikasi anda untuk mendapatkan semula DLL daripada perhimpunan dan bukannya direktori tempatan:
#pragma comment(linker, "/manifestdependency:\"name='Plugins' \ processorArchitecture='*' version='1.0.0.0' \ type='win32'\"")
Atas ialah kandungan terperinci Bagaimana untuk Mengubah Laluan Carian DLL untuk DLL Berpaut Statik Apabila DLL Tiada dalam Direktori Aplikasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!