C++ 中的序列化和 C# 中的反序列化,对于命名管道,反之亦然
Posted
技术标签:
【中文标题】C++ 中的序列化和 C# 中的反序列化,对于命名管道,反之亦然【英文标题】:Serialization in C++ and Deserialization in C# and vice versa for named pipe 【发布时间】: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# 中反序列化它,反之亦然,同样适用于同一个类。请给我一个例子。我也愿意接受任何其他解决方案,也可以在两个进程之间进行双向通信。
【问题讨论】:
这能回答你的问题吗? Object Sharing between Applications? 【参考方案1】:就像您选择命名管道一样,您现在必须选择一种序列化方法/约定。如果您的 C++ 代码可以通过 CLI 访问 .Net,那么您将有一个良好的开端,因为您可以确保在两端应用相同的规则。否则,您可以使用 JSON、XML、简单文本字符串甚至二进制等选项。您可能有做出此选择的技术原因(数据和结构与紧凑性等),或者它可能是由工具/框架的可用性驱动的(可能引导您使用 JSON 或 XML)为您进行(反)序列化。请注意,即使是简单的文本字符串,您也必须确保双方使用相同的编码(UTF-8、ASCII、...)。
请注意,C++ 和 C# 没有“语言保证”以任何“兼容”方式实现类,您可以将两个视图相互映射和/或构造类以具有 - 例如 - 相似JSON 序列化布局。
【讨论】:
以上是关于C++ 中的序列化和 C# 中的反序列化,对于命名管道,反之亦然的主要内容,如果未能解决你的问题,请参考以下文章