AppDomain和非托管dll

时间:2013-10-09 16:18:29

标签: unmanaged appdomain

是否可以使用多个AppDomain隔离非托管dll中的内存? 只是为了澄清,如果我有一个非托管的dll使用一些内部静态全局变量,如果我在不同的appdomains中加载那个非托管的dll会发生什么?我可以安全地假设dll将被加载到不同的地址空间中,因此它们拥有自己的共享数据副本吗?

1 个答案:

答案 0 :(得分:4)

不,那是不可能的。 AppDomains是纯粹的托管概念。非托管DLL状态是进程范围的,并且只能加载一个DLL副本。可能的hack是使用不同的名称创建DLL文件的副本。然而它的扩展性非常差,并且pinvoke非常讨厌,必须编写委托并使用LoadLibrary + GetProcAddress来绑定它们。

更干净的替代方法是使用加载DLL的单独辅助进程。使用像WCF这样的互操作机制与他们交谈。