J'ai une application C# qui doit utiliser une ancienne DLL Win32. La DLL est presque sa propre application, il a des boîtes de dialogue, les opérations avec le matériel, etc. Lorsque cette DLL est importé et utilisé, il y a quelques problèmes qui se produisent:Comment protéger une DLL Win32 importée dans une application .NET à partir de problèmes de mémoire
- Faire glisser une boîte de dialogue (pas un système Windows boîte de dialogue, mais un créé par la DLL) à travers l'application de code managé provoque l'interface utilisateur ne pas redessiner. En outre, il génère un système sur exception de la mémoire de diverses commandes UI . La performance est incroyablement lente.
- Il semble impossible de décharger la DLL de sorte que la mémoire jamais soit nettoyée. Lorsque nous fermons notre application gérée , nous obtenons une autre exception de mémoire.
Actuellement, nous importons chaque appel de méthode en tant que telle:
[DllImport("dllname.dll",
EntryPoint = "MethodName", SetLastError = true,
CharSet = CharSet.Auto, ExactSpelling = true,
CallingConvention = CallingConvention.StdCall)]
Je suppose que vous avez testé l'appel de la DLL à partir de code non géré, et qu'il se comporte correctement? – egrunin
Oui, la version antérieure de ce que nous avons remplacé par du code managé n'était pas gérée. – Eric