在.NET中独立运行C++库
问题描述:
我有一个使用C++库的.net应用程序。在应用程序中,您可以运行多个作业,每个作业使用C++库进行一些计算。问题是,C++对象在作业之间共享,我想避免它。我能想到的唯一方法是将每个任务作为一个单独的过程来运行。有没有更好的方法来做到这一点?就像跑在不同的范围内在.NET中独立运行C++库
答
答案是是的,但这并不容易。
AppDomain没有为本机代码提供隔离,所以您不能将它用于您的目标。每个非托管dll每个进程加载一次,而不是每个AppDomain。
您可以使用WinAPI LoadLibrary()
函数手动多次加载您的库。加载的库的每个副本可以在具有安全线程上下文的单独线程中使用。 Here是如何从动态加载库调用函数的描述。不要忘记拨打FreeLibrary()
来释放资源。
AppdDomain? https://msdn.microsoft.com/en-us/library/system.appdomain(v=vs.110).aspx – Matas
@Matas C++是.NET应用程序域之间共享的,不是吗? – MistyK
@Matas,恐怕AppDomain只能正确隔离.NET代码,对本地代码没有多大帮助。在处理COM对象时,我遇到了这样的隔离问题。 –