-2

我有一堆本机 C++ 对象和类,其中包含 DTL 映射、映射映射和列表以及向量。

我需要从 C++ 本机代码调用托管 C++ 函数,并且需要将这些本机对象和 STL 容器(列表、地图、地图地图)传递给 C++/CLI。它需要编组或如何序列化这些对象。我怎样才能做到这一点没有任何问题。这样在编组和序列化回托管 C++/CLI 之后,地图应该与字典和字典的字典、stl 列表和托管 List<> 等进行编组。

我怎样才能在所有情况下都做到这一点?是否需要复杂的编组问题处理......?

问候乌斯曼

4

1 回答 1

1

STL 内存布局是特定于实现的。例如 sizeof(std::vector) 在发布时为 16,在调试模式下为 20,当您使用 Visual C++ 附带的实现时。而且您在 STL 类中有指针,这些指针无法有意义地编组到托管内存。如果您想进行封送处理,您可以在界面中切换到与平台无关的 C 或 COM 类型(例如,传递带有计数参数的数组或安全数组),因为 .Net 对这些类型有更好的理解。我推荐 COM,因为它有更丰富的类型并且支持其他语言以备不时之需。

或者,如果您需要速度,您可以编写一个marshal_as模板函数来进行转换,这样您就可以重用编组代码甚至编组缓冲区,或者为您的 C++ 对象编写一个托管包装器

如果要封送的数据太大而无法放入内存,您还可以将数据序列化到临时文件或数据库中,然后从托管代码中分块读取它们。

于 2010-10-25T22:33:07.697 回答