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
421 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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan