2016-08-04 84 views
0

我有一個使用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對象時,我遇到了這樣的隔離問題。 –

回答

1

答案是是的,但這並不容易。

AppDomain沒有爲本機代碼提供隔離,所以您不能將它用於您的目標。每個非託管dll每個進程加載一次,而不是每個AppDomain。

您可以使用WinAPI LoadLibrary()函數手動多次加載您的庫。加載的庫的每個副本可以在具有安全線程上下文的單獨線程中使用。 Here是如何從動態加載庫調用函數的描述。不要忘記撥打FreeLibrary()來釋放資源。

+0

但是如果我無法訪問.net包裝呢?我完成了嗎? – MistyK

+0

@Zbigniew不幸的是,是的。如果你的.NET包裝器包含一些邏輯,你不能改變它或創建一個新的,唯一的辦法就是在一個單獨的過程中運行這樣的代碼。 – Nikita