我有一个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_;
};
答案 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 ++应用程序编写的,这一事实并不比手工编写它更重要。