Rumah >pembangunan bahagian belakang >C++ >Bolehkah Laluan DLL Dinamik Digunakan dengan DllImport C#?

Bolehkah Laluan DLL Dinamik Digunakan dengan DllImport C#?

Barbara Streisand
Barbara Streisandasal
2025-01-15 20:15:43773semak imbas

Can Dynamic DLL Paths Be Used with C#'s DllImport?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn