1

我需要一些可以添加到任意函数或函数调用的东西(如注释、反射、定义或完全不同的东西)。

对于添加了这个东西的每个函数f,都t应该使用 的参数调用一个特定的函数f

该函数t现在应该通过网络将其参数发送到其他程序。

有没有办法做这样的事情?

4

4 回答 4

3

这背后的一般原则称为marshalling,其中函数的参数以您可以将它们发送到其他计算机的方式包装。发送方编组参数,接收方解组。两者都需要了解类型,并且必须以与不同计算机体系结构一致的方式进行。

远程过程调用 (RPC) 是将函数调用从一台计算机发送到另一台计算机的一种方式,并且需要在它们后面进行一些编组。

正如 Victor 所指出的,XMLRPC 是一种实现方式,其中编组通过 XML 进行。还有很多其他的包,谷歌搜索 RPC 和编组应该提供更多可能性,但 XMLRPC 可能正是您想要的。

CORBA 和 DCOM 是相关的机制。在计算机之间发送函数调用的想法是分布式系统中的一个主要概念,所以也许再看一看,可能有非常简单的解决方案来解决您的具体问题。

于 2012-11-29T20:25:28.423 回答
1

如果您只想调用远程机器上的函数,XMLRPC库可能是您正在寻找的库。它使用 XML RPC 规范生成用于编组参数的代码。

于 2012-11-29T20:17:41.197 回答
1

您可以为此使用 Google 协议缓冲区:https ://developers.google.com/protocol-buffers/docs/overview

它是一个易于使用且可移植的序列化库。此外,您将能够编写能够以不同语言(如 Python、Java 等)与您的 C++ 代码“对话”(反序列化由您的 C++ 代码序列化的对象)的程序,这非常有用,例如便于测试.

于 2012-11-29T20:30:13.397 回答
0

如果您在 Linux/BSD 环境中,请执行“man rpcgen”。我发现使用 DCE/CORBA 构建分布式应用程序更容易。

让我们为您尝试做的事情命名,“进程间函数调用”或 IFC。

我一直在研究 IFC 编译器 (ifcc),用于生成可扩展的云应用程序,并在应用程序中内置基于浏览器的实时可见性。

原型编译器正在工作。框架的可见性部分也在工作,但尚未集成到编译器中以生成检测代码。

Ifcc 将 C 包含文件作为其输入,并基于 .h 文件中的函数原型声明,生成用于编组的 C 源代码,以及适用于异构(负责字节顺序)的客户端和服务器代理/存根/big endian/little endian) 环境。

而且,哦,顺便说一句,ifcc 是一个智能编译器。它不仅处理数组、typedef、嵌套结构等,而且还进行任意指针追踪。例如,如果您使用指向双向链表的指针调用函数,它将打包、发送并在接收端重新创建双向链表。

如果人们有兴趣使用它,请添加一条注释,其中包含您系统的“uname -a”输出以及您正在使用的编译器。如果有很多兴趣,我可以让开发人员学习/玩/实验。

于 2012-11-30T21:02:17.070 回答