问题(简化,以使事情更清晰):静态库使用托管代码问题
-
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