問題(簡化,以使事情更清晰):靜態庫使用託管代碼問題
-
1.有一個有一個遞增函數靜態鏈接static.lib:
extern int CallCount = 0;
int TheFunction()
{
void *p = &CallCount;
printf("Function called");
return CallCount++;
}
2.靜態的。 LIB被鏈接到託管C++/CLI managed.dll一個包裝TheFunction方法:
int Managed::CallLibFunc()
{
return TheFunction();
}
3.測試的應用程序有一個參考managed.dll並創建調用C++/CLI包裝多個域:
static void Main(string[] args)
{
Managed c1 = new Managed();
int val1 = c1.CallLibFunc();
// value is zero
AppDomain ad = AppDomain.CreateDomain("NewDomain");
Managed c = ad.CreateInstanceAndUnwrap(a.FullName, typeof(Managed).FullName) as Managed;
int val2 = c.CallLibFunc();
// value is one
}
問:
基於我已經基本.NET VOL1上的CLR由唐盒讀,我希望VAL2是因爲managed.dll的一個全新的副本,零/ static.lib是裝當調用CreateInstanceAndUnwrap時。我誤解了正在發生的事情嗎?因爲它是非託管代碼,所以靜態庫似乎並不尊重AppDomain邊界。除了通過創建一個用於實例化Managed的全新流程之外,是否有辦法解決此問題?
非常感謝大家!
幾年前我們在這裏嘗試了相同的結果。我們只能獲得非託管代碼的一個實例。 – 2008-09-16 14:25:23