2010-10-25 33 views
-1

我有一堆本地C++對象和類包含DTL地圖,地圖和列表和向量的地圖。如何Marshall C++本地對象託管C++ CLI

我需要從C++本機代碼調用託管C++函數,並需要將這些本機對象和STL容器(列表,地圖,地圖映射)傳遞給C++/CLI。它需要編組或一些如何序列化這些對象。我怎麼能解決任何問題。因此,編組和序列化回託管的C++/CLI後,地圖應與詞典和詞典的詞典,stl列表與列表<>等。

我怎麼能達到這一切的所有情況?它是否需要複雜的處理編組問題......?

問候 烏斯曼

回答

1

STL內存佈局是特定的實現。例如。當您使用Visual C++自帶的實現時,sizeof(std :: vector)在版本中爲16,在調試模式下爲20。而且你有STL類中的指針,這些指針不能有效地編組到託管內存中。如果您想進行封送處理,您可以在界面中切換到與平臺無關的C或COM類型(例如,傳遞帶有計數參數或安全數組的數組),因爲.Net對這些類型有更好的理解。我推薦使用COM,因爲它有更豐富的類型,並在需要時支持其他語言。

或者,如果您需要速度,您可以編寫一個marshal_as模板函數來執行轉換,以便您可以重新使用編組代碼甚至編組緩衝區或write a managed wrapper for your C++ objects

如果封送的數據太大而無法放入內存,您還可以將數據序列化爲臨時文件或數據庫,並以塊爲單位從託管代碼中讀回數據。

相關問題