我有很多原生C ++对象,类包含DTL地图,地图和列表以及向量地图。
我需要从C ++本机代码调用托管C ++函数,并且需要将这些本机对象和STL容器(列表,映射,映射映射)传递给C ++ / CLI。它需要编组或者一些如何序列化这些对象。如何解决任何问题我怎么能这样做。因此,在编组和序列化回托管C ++ / CLI之后,映射应该用字典和字典词典编组,stl列表与托管列表<>等等..
我怎样才能在所有情况下实现这一目标?是否需要复杂处理编组问题......?
此致 乌斯曼
答案 0 :(得分:1)
STL内存布局是特定于实现的。例如。当您使用Visual C ++附带的实现时,sizeof(std :: vector)在发行版中为16,在调试模式下为20。并且您在STL类中有指针,这些指针无法有效地编组到托管内存中。您可以在界面中切换到与平台无关的C或COM类型(例如,使用count参数或安全数组传递数组),如果您想要编组,则.Net可以更好地理解这些类型。我推荐COM,因为它有更丰富的类型,并支持其他语言,以备不时之需。
或者,如果您需要速度,可以编写marshal_as模板函数来进行转换,这样您就可以重复使用编组代码甚至编组缓冲区,或write a managed wrapper for your C++ objects。
如果被编组的数据太大而无法放入内存中,您还可以将数据序列化为临时文件或数据库,并以块的形式从托管代码中读取它们。