Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menyelesaikan Ralat 'Akses Ditolak' Apabila Membenamkan DLL Tidak Terurus dalam DLL C# Terurus?

Bagaimana untuk Menyelesaikan Ralat 'Akses Ditolak' Apabila Membenamkan DLL Tidak Terurus dalam DLL C# Terurus?

Patricia Arquette
Lepaskan: 2024-12-30 08:11:09
asal
809 orang telah melayarinya

How to Resolve

Membenamkan DLL Tidak Terurus dalam DLL C# Terurus

Membenamkan DLL tidak terurus dalam DLL C# terurus ialah cara mudah untuk menggabungkan sumber yang diperlukan dan mengurangkan pengurusan pergantungan. Soalan ini menangani pengecualian "Akses Ditolak" yang ditemui semasa cuba membenamkan DLL tidak terurus menggunakan atribut DllImport.

Penyelesaian yang disediakan melibatkan mengekstrak DLL tidak terurus ke dalam direktori sementara semasa pemula. Langkah ini melibatkan mengakses aliran sumber terbenam dan menyalin kandungan DLL ke lokasi sementara. DLL yang diekstrak kemudiannya dimuatkan secara eksplisit menggunakan LoadLibrary sebelum menggunakan panggilan P/Invoke.

// Extract and load the unmanaged DLL.
string dllPath = Path.Combine(Path.GetTempPath(), "MyAssembly." +
  Assembly.GetExecutingAssembly().GetName().Version.ToString(), "MyAssembly.Unmanaged.dll");

using (Stream stm = Assembly.GetExecutingAssembly().GetManifestResourceStream(
  "MyAssembly.Properties.MyAssembly.Unmanaged.dll"))
{
  using (Stream outFile = File.Create(dllPath))
  {
    const int sz = 4096;
    byte[] buf = new byte[sz];
    while (true)
    {
      int nRead = stm.Read(buf, 0, sz);
      if (nRead < 1)
        break;
      outFile.Write(buf, 0, nRead);
    }
  }
}

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

Setelah DLL yang tidak diurus dimuatkan, ia tersedia untuk digunakan oleh panggilan DllImport dalam DLL terurus. Pendekatan ini memastikan bahawa versi DLL yang tidak diurus yang betul digunakan, walaupun berbilang aplikasi dengan versi berbeza berjalan serentak.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'Akses Ditolak' Apabila Membenamkan 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