【问题标题】:Serialization in C++ and Deserialization in C# and vice versa for named pipeC++ 中的序列化和 C# 中的反序列化,对于命名管道,反之亦然
【发布时间】:2021-04-03 10:58:31
【问题描述】:

我有两个进程(.exe),一个是用 C++ 实现的,另一个是用 C# 实现的。我想要的是两个过程之间的通信。为此,我选择了“命名管道”方法。我面临的问题是将类对象从一个应用程序传递到另一个应用程序。我可以轻松地发送字符串数据,但我不知道如何将类对象从应用程序发送到另一个。我的班级结构如下:

enum information
{
 TITLE,
 STATUS,
 DEBUG,
 INFO,
 OTHER
};

class CInformation
{
  private:
    information _info;
    string _text;
  public:
    void setInformation(information info, string text) { _info = info; _text = text; }
    inline information GetInfo() { return _info; }
    inline string GetText() { return _text; }
};

那么如何在 C++ 中序列化这个类,通过命名管道发送它并在 C# 中反序列化它,反之亦然,同样适用于同一个类。请给我一个例子。我也愿意接受任何其他解决方案,也可以在两个进程之间进行双向通信。

【问题讨论】:

标签: c# c++ serialization deserialization marshalling


【解决方案1】:

就像您选择命名管道一样,您现在必须选择一种序列化方法/约定。如果您的 C++ 代码可以通过 CLI 访问 .Net,那么您将有一个良好的开端,因为您可以确保在两端应用相同的规则。否则,您可以使用 JSON、XML、简单文本字符串甚至二进制等选项。您可能有做出此选择的技术原因(数据和结构与紧凑性等),或者它可能是由工具/框架的可用性驱动的(可能引导您使用 JSON 或 XML)为您进行(反)序列化。请注意,即使是简单的文本字符串,您也必须确保双方使用相同的编码(UTF-8、ASCII、...)。

请注意,C++ 和 C# 没有“语言保证”以任何“兼容”方式实现类,您可以将两个视图相互映射和/或构造类以具有 - 例如 - 相似JSON 序列化布局。

【讨论】:

    猜你喜欢
    • 2010-11-16
    • 2010-10-18
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 2015-05-18
    相关资源
    最近更新 更多