Maison >développement back-end >C++ >Comment intégrer des DLL non gérées dans des DLL C# gérées et éviter « l'accès est refusé » ?
Intégration de DLL non gérées dans des DLL C# gérées
Lors de l'intégration de DLL non gérées avec du code C# géré, les développeurs rencontrent souvent le besoin d'intégrer ces DLL dans l’assemblage géré. Cet article étudie les problèmes potentiels et propose une solution pour intégrer des DLL non gérées dans des DLL gérées.
Énoncé du problème
Un développeur tente d'intégrer une DLL non gérée dans un C# géré. DLL utilisant l'attribut DllImport, comme recommandé par Microsoft. Cependant, lors de l'exécution du code, une exception « Accès refusé » est levée.
Solution
Bien que la documentation MSDN suggère la faisabilité de l'intégration de DLL non gérées, elle échoue pour résoudre le problème sous-jacent lié aux autorisations d’accès aux DLL. La solution suivante résout efficacement ce problème :
Voici un exemple d'implémentation de cette approche. :
// 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);
En suivant ces étapes, les développeurs peuvent intégrer avec succès des DLL non gérées dans des fichiers gérés. DLL C#, surmontant l'exception « Accès refusé » et libérant tout le potentiel de cette technique d'intégration.
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!