Rumah >pembangunan bahagian belakang >C++ >Bolehkah Laluan DLL Dinamik Digunakan dengan DllImport C#?
Adakah DllImport dalam C# menyokong laluan dinamik masa jalan?
Apabila menggunakan atribut DllImport
dalam C#, anda biasanya perlu menentukan laluan ke DLL secara statik. Walau bagaimanapun, apabila laluan pemasangan aplikasi bergantung kepada pengguna (contohnya: C:UsersuserName...), pengekodan keras laluan mutlak tidak praktikal.
Kaedah tradisional
Walaupun isu ini, adalah disyorkan untuk menggunakan laluan relatif. Nyatakan hanya nama DLL dan sistem akan mencarinya dalam direktori aplikasi dan lokasi pratakrif lain (mengikut garis panduan pemuatan DLL Windows).
SetDllDirectory dan P/Invoke
Jika laluan relatif tidak sesuai dengan keperluan anda, pertimbangkan untuk menggunakan fungsi SetDllDirectory
. Fungsi ini membolehkan anda mengubah suai laluan carian DLL lalai pada masa jalankan, membolehkan anda menentukan laluan dinamik yang dikira pada masa itu.
Untuk menggunakan SetDllDirectory
anda perlu menggunakan P/Invoke kerana ia adalah fungsi API Windows. Inilah kenyataannya:
<code class="language-csharp">[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern bool SetDllDirectory(string lpPathName);</code>
Pencapaian
Kod anda sepatutnya kelihatan serupa dengan yang berikut:
<code class="language-csharp">SetDllDirectory(Path.GetTempPath() + "..\myLibFolder"); [DllImport("MyAppDll.dll")] static extern bool MyGreatFunction(int myFirstParam, int mySecondParam);</code>
Ini mengubah hala laluan carian DLL ke lokasi yang mengandungi garpu masa jalan, sebelum susunan carian standard sistem.
Kelebihan
Menggunakan fungsi SetDllDirectory
, anda boleh menentukan lokasi masa jalan DLL secara dinamik tanpa bergantung pada mesin atau laluan pemasangan pengguna.
Atas ialah kandungan terperinci Bolehkah Laluan DLL Dinamik Digunakan dengan DllImport C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!