Heim > Backend-Entwicklung > C++ > Wie behebe ich den Fehler „Zugriff verweigert' beim Einbetten einer nicht verwalteten DLL in eine verwaltete C#-DLL?

Wie behebe ich den Fehler „Zugriff verweigert' beim Einbetten einer nicht verwalteten DLL in eine verwaltete C#-DLL?

Patricia Arquette
Freigeben: 2024-12-30 08:11:09
Original
809 Leute haben es durchsucht

How to Resolve

Einbetten einer nicht verwalteten DLL in eine verwaltete C#-DLL

Das Einbetten einer nicht verwalteten DLL in eine verwaltete C#-DLL ist eine praktische Möglichkeit, erforderliche Ressourcen zu bündeln und das Abhängigkeitsmanagement zu reduzieren. Diese Frage befasst sich mit einer „Zugriff verweigert“-Ausnahme, die beim Versuch, eine nicht verwaltete DLL mithilfe des DllImport-Attributs einzubetten, aufgetreten ist.

Die bereitgestellte Lösung umfasst das Extrahieren der nicht verwalteten DLL in ein temporäres Verzeichnis während der Initialisierung. Dieser Schritt umfasst den Zugriff auf den eingebetteten Ressourcenstream und das Kopieren der DLL-Inhalte an den temporären Speicherort. Die extrahierte DLL wird dann explizit mit LoadLibrary geladen, bevor P/Invoke-Aufrufe verwendet werden.

// 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);
Nach dem Login kopieren

Sobald die nicht verwaltete DLL geladen ist, steht sie für die Verwendung durch DllImport-Aufrufe innerhalb der verwalteten DLL zur Verfügung. Dieser Ansatz stellt sicher, dass die richtige Version der nicht verwalteten DLL verwendet wird, auch wenn mehrere Anwendungen mit unterschiedlichen Versionen gleichzeitig ausgeführt werden.

Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „Zugriff verweigert' beim Einbetten einer nicht verwalteten DLL in eine verwaltete C#-DLL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage