2011-09-27 23 views
2

我有一個C++作爲後端,C#作爲前端,我使用pinvoke互操作機制在本機代碼和託管代碼之間進行通信。在返回C#後保留C++類的狀態

現在的問題是,C++後端,初始化部分和計算即時部分實際上有兩部分計算。初始化只需要完成一次,但需要很長時間才能完成,而即時計算部分需要很短時間才能完成,但需要一遍又一遍地完成。

而C++代碼保持原樣,不能重寫成C#代碼。

我可以修改C ​​++和C#代碼,因爲我擁有它們。

我知道如何做靜態互操作,但我不知道如何做這種狀態全互操作。任何想法?

回答

3

您可以在C++/CLI中編寫一個封裝器,從而提供真正的CLR類型。您可以無縫地在C#中管理其生命週期。

  • 有相當一些它在網絡上的信息:herehere(只是谷歌 「C++/CLI包裝」)。
  • 而且,自然,在計算器上:here

除非有一些漂亮的工具,你將不得不自己寫這個包裝。或者,你可以在你的C++類中編寫一個包裝函數(或其集合),可能只會將所需的最小功能作爲「C」函數公開。然後你會從init函數中拿出一個「HANDLE」(Int32,IntPtr,其他),並要求它作爲計算函數的輸入。你將不得不在內部管理這些包裝函數(你可能還想提供一個清理函數)。