将C ++对象传递给C#

时间:2012-10-18 05:33:39

标签: c# c++ c++-cli

我有一个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_; 
}; 

2 个答案:

答案 0 :(得分: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#读取结构或复杂类型中的二进制或文本数据。

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

答案 1 :(得分:-1)

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