2014-01-23 79 views
2

我有一個32位的應用程序,我無法控制。我目前正在與一個32位的C++ DLL進行通信,這個C++ DLL會對數據進行處理並將其傳遞給C#應用程序可以訪問的32位.NET DLL。我想將我的C#應用​​程序升級到64位以獲得更大的內存訪問權限。.NET Concurrent Collections可用於進程間x32與x64通信之間的進程嗎?

有沒有辦法讓我的32位C++ DLL與.NET Concurrent Collections交談,特別是ConcurrentQueue?這會允許進程間通信嗎?如果是這樣,有沒有我可以從中學習的例子?如果沒有,是否有人知道任何API或庫可以解決雙向32-64位進程間通信。

看來這對許多開發者來說是一個主要問題,但我的搜索還沒有發現一個快速,可靠,可能是簡單的解決方案。我感到奇怪的是,主要組件開發人員不提供任何解決方案(我發現)。

在此先感謝您的幫助。

+1

COM互操作是獲取本機C++應用程序使用.NET對象的常用方法。適用於System.Collections中的類,它們具有[ComVisible]屬性。跨過程和邊界邊界工作。但不適用於併發集合,它們是通用的。 COM不支持泛型類。這就是它結束的地方。 –

回答

2

沒有辦法在32位和64位應用程序和dll中進行進程間混合。

如果你想有一個32位和64位應用程序,那麼你有幾個選項之間進行通信:

  1. 包了32位庫爲COM對象和託管它的過程。 COM會將來自64位的呼叫編組到32位,然後再回來。

  2. 使用IPC(例如命名管道,TCP或WCF)在32位和64位應用程序之間進行通信。

  3. 使用內存映射文件使用共享數據結構交換數據。這可能是最複雜的解決方案。

+0

這是我的預期。任何人都知道可以使用各種方法的幫助程序庫和/或示例代碼?哪種方法對於小塊浮點數據最快? – Iststd