J'ai lu les deux autres threads qui extraient la DLL de l'application lors de l'exécution. L'une de ces méthodes utilisait le répertoire temporaire Windows actuel pour enregistrer la DLL, mais il s'agissait d'une DLL non managée et elle devait être importée à l'exécution avec DllImport
. En supposant que ma DLL gérée est exportée vers le répertoire temporaire, comment puis-je lier correctement cet assembly managé à mon projet MSVC# actuel?Comment les paquets C# dll gérés par un paquet avec une application C# gérée sans laisser de fichiers?
0
A
Répondre
3
Vous n'avez pas besoin d'enregistrer dans un répertoire temporaire. Mettez simplement la DLL gérée en tant que 'ressource intégrée' dans votre projet. Ensuite, accrochez l'événement Appdomain.AssemblyResolve et dans l'événement, chargez la ressource en tant que flux d'octets et chargez l'assembly à partir du flux et renvoyez-le.
Exemple de code:
// Windows Forms:
// C#: The static contructor of the 'Program' class in Program.cs
// VB.Net: 'MyApplication' class in ApplicationEvents.vb (Project Settings-->Application Tab-->View Application Events)
// WPF:
// The 'App' class in WPF applications (app.xaml.cs/vb)
static Program() // Or MyApplication or App as mentioned above
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
if (args.Name.Contains("Mydll"))
{
// Looking for the Mydll.dll assembly, load it from our own embedded resource
foreach (string res in Assembly.GetExecutingAssembly().GetManifestResourceNames())
{
if(res.EndsWith("Mydll.dll"))
{
Stream s = Assembly.GetExecutingAssembly().GetManifestResourceStream(res);
byte[] buff = new byte[s.Length];
s.Read(buff, 0, buff.Length);
return Assembly.Load(buff);
}
}
}
return null;
}
Questions connexes
- 1. Comment empêcher la technologie dll gérée par reverse engineering C#
- 2. Comment partager des données entre une application C++ et une application C# sans fichiers?
- 3. Comment gérer les exceptions dans des applications mixtes? (application gérée utilisant une DLL non gérée)
- 4. Gestion des destructeurs d'objets gérés (C#) et non gérés (C++)
- 5. Utilisation de la DLL C++ gérée à partir de C#
- 6. Utilisation de la DLL non gérée C++ en C#
- 7. Comment passer des tableaux gérés par ref à une bibliothèque non gérée?
- 8. comment gérer les exceptions dans DLL C# chargées par C++
- 9. C# Fusionner des fichiers .dll avec ILMerge
- 10. Est-il possible d'utiliser une DLL créée en utilisant C# dans une application VC++ non gérée?
- 11. C# Reconnaître les paquets Https
- 12. C# Spoofing de paquets réseau
- 13. Générer par programme une DLL C Win32
- 14. Méthode sans douleur pour appeler une fonction C# gérée (sans valeur de retour) à partir de C++ non géré?
- 15. Création d'un paquet r avec une DLL C++ dans Windows et d'assurer la portabilité à Linux
- 16. vs2008 Incluant la classe C++ gérée d'une DLL dans une autre classe C++ managée?
- 17. Comment appeler C# .dll à partir d'une application C++/CLI?
- 18. importation Dynamiquement un C/C++ DLL
- 19. Comment utiliser les fichiers jar sans informations sur le paquet?
- 20. C# Obtention de données par paquets
- 21. Comment utiliser une classe C++ dans une application C# sans tenir compte de la plateforme?
- 22. Comment fermer une application C# sans formulaire
- 23. C++/CLI Convertir une liste C++ native non gérée en une liste C++/CLI gérée
- 24. C++ conception - les paquets réseau et sérialisation
- 25. Comment héberger des contrôles .Net sous licence dans une application C++ non gérée?
- 26. Conversion entre les types gérés et non gérés en C++?
- 27. Comment protéger mon application C# de l'écrasement lors de l'appel d'une méthode dans une DLL non gérée?
- 28. exposer une bibliothèque de classe C++ non gérée à C#
- 29. Attributs d'assembly C++ gérés
- 30. vs2008 problème de publication avec les DLLs non gérés
Oh wow, juste ce que je cherchais! – Gbps