Maison > développement back-end > C++ > Comment résoudre les erreurs « Accès refusé » lors de l'intégration d'une DLL non gérée dans une DLL C# gérée ?

Comment résoudre les erreurs « Accès refusé » lors de l'intégration d'une DLL non gérée dans une DLL C# gérée ?

Patricia Arquette
Libérer: 2024-12-30 08:11:09
original
809 Les gens l'ont consulté

How to Resolve

Intégrer une DLL non gérée dans une DLL C# gérée

L'intégration d'une DLL non gérée dans une DLL C# gérée est un moyen pratique de regrouper les ressources nécessaires et de réduire la gestion des dépendances. Cette question concerne une exception « Accès refusé » rencontrée lors de la tentative d'intégration d'une DLL non gérée à l'aide de l'attribut DllImport.

La solution fournie consiste à extraire la DLL non gérée dans un répertoire temporaire lors de l'initialisation. Cette étape implique d'accéder au flux de ressources intégré et de copier le contenu de la DLL vers l'emplacement temporaire. La DLL extraite est ensuite explicitement chargée à l'aide de LoadLibrary avant d'utiliser les appels 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);
Copier après la connexion

Une fois la DLL non gérée chargée, elle est disponible pour être utilisée par les appels DllImport dans la DLL gérée. Cette approche garantit que la version correcte de la DLL non gérée est utilisée, même si plusieurs applications avec des versions différentes s'exécutent simultanément.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal