Heim >Backend-Entwicklung >C++ >Wie kann ich nicht verwaltete DLLs in verwaltete C#-DLLs einbetten und „Zugriff verweigert' vermeiden?
Einbetten nicht verwalteter DLLs in verwaltete C#-DLLs
Bei der Integration nicht verwalteter DLLs in verwalteten C#-Code stehen Entwickler häufig vor der Notwendigkeit, diese DLLs darin einzubetten die verwaltete Versammlung. Dieser Artikel untersucht die potenziellen Probleme und bietet eine Lösung für die Einbettung nicht verwalteter DLLs in verwaltete DLLs.
Problemstellung
Ein Entwickler versucht, eine nicht verwaltete DLL in ein verwaltetes C# einzubetten. DLL mithilfe des DllImport-Attributs, wie von Microsoft empfohlen. Beim Ausführen des Codes wird jedoch die Ausnahme „Zugriff verweigert“ ausgelöst.
Lösung
Während die MSDN-Dokumentation die Machbarkeit der Einbettung nicht verwalteter DLLs nahelegt, schlägt dies fehl um das zugrunde liegende Problem im Zusammenhang mit DLL-Zugriffsberechtigungen zu beheben. Die folgende Lösung behebt dieses Problem effektiv:
Hier ist eine Beispielimplementierung dieses Ansatzes :
// 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);
Durch Befolgen dieser Schritte können Entwickler nicht verwaltete DLLs erfolgreich in verwaltete DLLs einbetten C#-DLLs, die die Ausnahme „Zugriff verweigert“ überwinden und das volle Potenzial dieser Integrationstechnik freisetzen.
Das obige ist der detaillierte Inhalt vonWie kann ich nicht verwaltete DLLs in verwaltete C#-DLLs einbetten und „Zugriff verweigert' vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!