2011-09-05 37 views
0

有一个COM DLL(VC6.0 ATL向导内置),我想用appdomain的身份来暗示一个进程创建多个appdomain,每加载一次这个COM DLL和保证大家COM DLL具有分离的存储器空间appdomain加载一个COM DLL多次并保持内存隔离

例如

的AppDomain域1 = AppDomain.CreateDomain( “D1”)。 AppDomain Domain2 = AppDomain.CreateDomain(“D2”);

object obj1 = Domain1.CreateInstanceFromAndUnwrap(“UnManagedCOMDLL.dll”,“UnManagedCOMDLL.ShowTag”);

对象OBJ2 = Domain2.CreateInstanceFromAndUnwrap( “UnManagedCOMDLL.dll”, “UnManagedCOMDLL.ShowTag”)

在该DLL,有一个全局变量,每次它加载,它++时间。虽然com在不同的appdomain中加载,但全局变量是相互共享的。

为什么会出现这样的结果?应用程序域应该保持内存iasolation,但它失败。

但是,要管理的dll,appdomain可以工作。

帮帮我!!!!!

+0

一个AppDomain只保持内存分离w.r.t.托管代码作为CLR/JIT实现隔离,它实际上并不存在,它是一个人工构造。当你在混音中获得本地代码时,它们都会消失,基本上你几乎无法做到。 – tyranid

+0

非常感谢,这是我第一次在这里问问题。你是第一个答案。因为我的软件(DLL)是由VC6.0开发的,现在只有一个客户端可以启动它。在未来,我希望一个客户推出它的多个。 任何想法都欢迎。 – Michaelf

回答

0

我建议你将COM对象加载到一个或多个宿主进程中。这是你可以为他们提供你正在寻找的隔离类型的唯一方法。你可以推出你自己的,或者看看COM +