在.NET中独立运行C++库

问题描述:

我有一个使用C++库的.net应用程序。在应用程序中,您可以运行多个作业,每个作业使用C++库进行一些计算。问题是,C++对象在作业之间共享,我想避免它。我能想到的唯一方法是将每个任务作为一个单独的过程来运行。有没有更好的方法来做到这一点?就像跑在不同的范围内在.NET中独立运行C++库

+0

AppdDomain? https://msdn.microsoft.com/en-us/library/system.appdomain(v=vs.110).aspx – Matas

+0

@Matas C++是.NET应用程序域之间共享的,不是吗? – MistyK

+0

@Matas,恐怕AppDomain只能正确隔离.NET代码,对本地代码没有多大帮助。在处理COM对象时,我遇到了这样的隔离问题。 –

答案是是的,但这并不容易。

AppDomain没有为本机代码提供隔离,所以您不能将它用于您的目标。每个非托管dll每个进程加载一次,而不是每个AppDomain。

您可以使用WinAPI LoadLibrary()函数手动多次加载您的库。加载的库的每个副本可以在具有安全线程上下文的单独线程中使用。 Here是如何从动态加载库调用函数的描述。不要忘记拨打FreeLibrary()来释放资源。

+0

但是如果我无法访问.net包装呢?我完成了吗? – MistyK

+0

@Zbigniew不幸的是,是的。如果你的.NET包装器包含一些逻辑,你不能改变它或创建一个新的,唯一的办法就是在一个单独的过程中运行这样的代码。 – Nikita