使用COM二进制序列化作为c#和c++不可理解的格式
本文关键字:c++ 可理解 格式 二进制 COM 序列化 使用 | 更新日期: 2023-09-27 17:49:34
我在c#和c++进程之间的高性能IPC工作。我已经选择了IPC机制。但是要致力于与本机和托管端兼容的序列化。我在找原生动物。但似乎COM在用于IPC时也会进行二进制序列化。也许我可以用它。
我应该研究哪些库和方法?(如果可以的话,只是不想添加protobuf)
是的,COM可以这样做。这是一种与原型完全不同的方法,但是它支持进程外服务器。换句话说,您可以将c++程序编写为这样一个服务器,并且您的客户端代码可以自动启动它并开始调用由服务器实现的方法。您希望跨越进程边界的数据可以通过这种方法的参数传递。c#的等效功能是Remoting或WCF。
序列化实际上是COM的弱点之一,您可能必须提供称为代理/存根的额外代码,该代码知道如何编码通过参数传递的数据,以便它可以跨边界传递。有很多工具支持这一点,首先用一种称为IDL(接口描述语言)的语言描述方法及其参数。然后可以自动编译成代理/存根DLL。如果您传递的数据特别繁重,那么您可能必须编写自定义编组程序。或者,如果它特别简单,将自己限制为COM自动化支持的类型子集,那么您可能根本不需要代理/存根,可以使用标准的编组器。它使用类型库,也从IDL自动生成。
这里有很多灵活性,但这当然是有代价的。COM被广泛认为是困难的。当您遇到问题时也不容易调试。如果"可理解"是你的主要目标,那就不要考虑COM,因为原型更容易解决。再往下一步,命名管道或套接字在运行时环境中都很容易实现,但是数据的反/序列化取决于您。您可以使用XML使其易于理解。