0

我在 C# 和 C++ 进程之间的高性能 IPC 工作。我已经选择了IPC机制。但是在与本机和托管方面兼容的序列化方面工作。我正在研究protobuf。但似乎 COM 在用于 IPC 时也会进行二进制序列化。也许我可以使用它。

我应该研究什么库和方法?(只是不想添加protobuf,如果可以的话)

4

1 回答 1

1

是的,COM 可以做到这一点。它是一种与 proto-buf 完全不同的方法,它支持进程外服务器。换句话说,您可以将您的 C++ 程序编写为这样的服务器,并且您的客户端代码可以自动启动它并开始调用服务器实现的方法。您想要跨越流程边界的数据可以通过这种方法的参数传递。C# 等效项是 Remoting 或 WCF。

序列化实际上是 COM 中的弱点之一,您可能必须提供称为代理/存根的附加代码,该代码知道如何对通过参数传递的数据进行编码,以便可以跨边界传递。对此有很多工具支持,您首先使用一种称为 IDL(接口描述语言)的语言来描述方法及其参数。然后可以自动编译成代理/存根 DLL。如果您传递的数据特别繁重,那么您可能必须编写一个自定义编组器。或者,如果它特别简单,将自身限制为 COM 自动化支持的类型子集,那么您可能根本不需要代理/存根,并且可以使用标准编组器。它使用类型库,也是从 IDL 自动生成的。

这里有很多灵活性,但这肯定是有代价的。COM 被广泛认为是困难的。遇到问题时也不容易调试。如果“可理解”是您的主要目标,那么不要考虑 COM,proto-buf 更容易解决。下一步,命名管道或套接字在任一运行时环境中都很容易上手,但反序列化/序列化数据取决于您。您可以通过使用 XML 使其易于理解。

于 2012-12-27T14:50:10.050 回答