2011-09-05 2 views
0

Il y a une DLL COM (VC6.0 ATL wizard construit), je veux utiliser les identités d'appdomain pour implémenter un processus crée plusieurs appdomain, chaque charger cette DLL COM et que tout le monde l'espace de mémoire DLL pour avoir isolé COMappdomain charger un com dll pour plusieurs fois et garder la mémoire isolée

Par exemple

AppDomain Domain1 = AppDomain.CreateDomain ("D1"). AppDomain Domain2 = AppDomain.CreateDomain ("D2");

objet obj1 = Domain1.CreateInstanceFromAndUnwrap ("UnManagedCOMDLL.dll", "UnManagedCOMDLL.ShowTag");

objet obj2 = Domain2.CreateInstanceFromAndUnwrap ("UnManagedCOMDLL.dll", "UnManagedCOMDLL.ShowTag")

Dans ce dll, il y a une variable globale, chaque fois qu'il charge, il ++. Bien que le com soit chargé dans un domaine d'application différent, la variable globale est partagée par les autres.

pourquoi un tel résultat est-il arrivé? appdomain devrait garder l'isolement de la mémoire, mais il a échoué.

Cependant, à DLL géré, appdomain peut fonctionner.

aidez-moi !!!!!

+0

Un AppDomain ne garde que la mémoire séparée w.r.t. Le code géré comme le CLR/JIT implémente l'isolation, il n'existe pas réellement physiquement, c'est une construction artificielle. Quand vous obtenez du code natif dans le mixage, tout sort de la fenêtre, il n'y a pratiquement rien à faire à ce sujet. – tyranid

+0

merci beaucoup, c'est la première fois que je pose une question ici. vous êtes la première réponse. parce que mon logiciel (DLL) est développé par VC6.0, aujourd'hui un client pour le lancer. à l'avenir j'espère qu'un client en lancera plusieurs. toutes les idées sont les bienvenues. – Michaelf

Répondre

0

Je vous suggère de charger l'objet COM dans un ou plusieurs processus d'hébergement. C'est la seule façon de leur donner le type d'isolement que vous recherchez. Vous pouvez lancer le vôtre, ou peut-être regarder dans COM +

Questions connexes