Membenamkan DLL Tidak Terurus dalam DLL C# Terurus
Apabila menyepadukan DLL tidak terurus dengan kod C# terurus, pembangun sering menghadapi keperluan untuk membenamkan DLL ini dalam perhimpunan terurus. Artikel ini menyiasat isu yang berpotensi dan menyediakan penyelesaian untuk membenamkan DLL tidak terurus ke dalam DLL terurus.
Pernyataan Masalah
Pemaju cuba membenamkan DLL tidak terurus dalam C# terurus DLL menggunakan atribut DllImport, seperti yang disyorkan oleh Microsoft. Walau bagaimanapun, selepas menjalankan kod, pengecualian "Akses dinafikan" dilemparkan.
Penyelesaian
Walaupun dokumentasi MSDN mencadangkan kemungkinan membenamkan DLL yang tidak terurus, ia gagal untuk menangani isu asas yang berkaitan dengan kebenaran akses DLL. Penyelesaian berikut berkesan menangani masalah ini:
Inilah contoh pelaksanaan ini pendekatan:
// Extract the unmanaged DLL 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"); 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); } } } // Load the DLL explicitly IntPtr h = LoadLibrary(dllPath); Debug.Assert(h != IntPtr.Zero, "Unable to load library " + dllPath);
Dengan mengikuti langkah ini, pembangun boleh berjaya membenamkan DLL tidak terurus ke dalam DLL C# terurus, mengatasi pengecualian "Akses dinafikan" dan membuka kunci potensi penuh teknik penyepaduan ini.
Atas ialah kandungan terperinci Bagaimana untuk Membenamkan DLL Tidak Terurus dalam DLL C# Terurus dan Elakkan 'Akses Ditolak'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!