2011-09-05 78 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 +