4

我有一个 C# 应用程序,它从 C++ 应用程序接收序列化数据作为文本(数据是使用 BOOST 库在 C++ 中序列化的)现在序列化数据实际上是一个对象,我需要将其转换为类似的 .Net 对象。为了为了实现这一点,我被告知可以将 C++/CLI 组件编写为 dll,它可以反序列化文本数据(使用用于序列化它的同一库)并将其传递回 C# 应用程序。我没有 C++/CLI 编程经验,但我在 C++ 编程方面没有任何问题。但我不认为 C++/CLI 很难掌握。我的问题是我没有得到关于如何创建 C++/CLI 应用程序将对象传递回 C# 的部分?任何提示、教程、链接将不胜感激

编辑正在发送的对象在 C++ 中是这样的

class person 
{ 
public: 
    person() 
    { 
    } 

    person(int age) : age_(age) 
    { 
    } 

    int age() const 
    { 
        return age_; 
    } 

private: 

    friend class boost::serialization::access; 

    template <typename Archive> 
    void serialize(Archive &ar, const unsigned int version) 
    { 
        ar & age_; 
    } 

    int age_; 
}; 
4

2 回答 2

1

您应该阅读命名空间 System.Runtime.InteropServices.Marshal

这是一篇关于如何将二进制数据 - 结构编组为 c# 结构的优秀文章。 http://www.codeproject.com/Articles/66243/Marshaling-with-C-Chapter-3-Marshaling-Compound-Ty

这是类型参考 - http://www.codeproject.com/Articles/66244/Marshaling-with-C-Chapter-2-Marshaling-Simple-Type

它称为编组,您可以使用 C# 读取结构或复杂类型中的二进制或文本数据。

您应该在这里考虑的几件事是结构的打包和对齐。谷歌搜索这些术语将产生非常有用的结果

于 2012-10-18T06:03:19.253 回答
0

我可能是错的,但 XML 的全部意义不在于它与平台和语言无关吗?只要您接收到的 C# 类镜像 XML 文件中的数据结构(即它有一个 int age_ 变量),使用 C# 中的普通 XML 文件解析器对其进行反序列化应该不会有任何问题。XML 文件是由 C++ 应用程序编写的这一事实并不比您手动编写更重要。

于 2012-10-18T06:43:49.863 回答