Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Berjaya Membenamkan dan Menggunakan DLL Tidak Terurus dalam DLL C# Terurus?

Bagaimanakah Saya Boleh Berjaya Membenamkan dan Menggunakan DLL Tidak Terurus dalam DLL C# Terurus?

Patricia Arquette
Lepaskan: 2024-12-29 07:44:09
asal
367 orang telah melayarinya

How Can I Successfully Embed and Use an Unmanaged DLL within a Managed C# DLL?

Membenamkan DLL Tidak Terurus ke dalam DLL C# Terurus

Membenamkan DLL tidak terurus dalam DLL terurus ialah teknik yang berguna untuk menyatukan dan melindungi kebergantungan. Walau bagaimanapun, ia mungkin mencabar untuk dicapai.

Isu:

Apabila cuba membenamkan DLL tidak terurus ke dalam DLL terurus menggunakan DllImport, anda menghadapi akses ditolak ralat.

Penjelasan:

Untuk membenamkan DLL yang tidak terurus sebagai sumber, anda perlu mengambil langkah tambahan selain daripada menambahkannya sebagai sumber terbenam dalam projek.

Penyelesaian:

Untuk berjaya membenamkan dan menggunakan DLL tidak terurus dalam DLL terurus:

  1. Ekstrak dan Muatkan DLL Terbenam:

    • Ekstrak DLL yang tidak terurus daripada strim sumber terbenam ke direktori sementara.
    • Muat secara eksplisit DLL yang diekstrak menggunakan LoadLibrary sebelum menggunakan DllImport.
  2. Gunakan Direktori Sementara Unik:

    • Buat direktori sementara yang unik untuk setiap versi pemasangan anda untuk mengelakkan versi konflik.
  3. Kendalikan Pengecualian Penyalinan Fail:

    • Kendalikan pengecualian apabila cuba menyalin DLL terbenam ke direktori sementara . Anda mungkin boleh mengabaikan pengecualian jika fail sudah wujud dalam direktori.

Kod Contoh:

Kod berikut coretan menunjukkan proses pembenaman:

// Get a unique temporary directory for this assembly version
string dirName = Path.Combine(Path.GetTempPath(), "MyAssembly." +
  Assembly.GetExecutingAssembly().GetName().Version.ToString());
if (!Directory.Exists(dirName))
  Directory.CreateDirectory(dirName);
string dllPath = Path.Combine(dirName, "MyAssembly.Unmanaged.dll");

// Extract the embedded DLL to the temporary location
using (Stream stm = Assembly.GetExecutingAssembly().GetManifestResourceStream(
  "MyAssembly.Properties.MyAssembly.Unmanaged.dll"))
{
  using (Stream outFile = File.Create(dllPath))
  {
    CopyBytes(stm, outFile);
  }
}

// Load the extracted DLL explicitly
IntPtr h = LoadLibrary(dllPath);
Debug.Assert(h != IntPtr.Zero, "Unable to load library " + dllPath);
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Berjaya Membenamkan dan Menggunakan DLL Tidak Terurus dalam DLL C# Terurus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan