如何发送或保存函数并恢复或恢复函数并在C ++中执行?

时间:2011-08-31 13:20:17

标签: c++ function serialization

有什么方法可以发送或保存函数作为文件?我想在Windows平台上用C ++做这件事。

我认为读者与发件人或保护者之间存在一些约定

如果我发送如下,是否可以? 服务器端:

label1:
int func1(int somevar){
    int a = 1;
    return somevar+a;
}
label2:

send(sockfd, label2-label1, sizeof(int), 0) //send a size first
send(sockfd, label1, label2-label1, 0); // send a "function" 

提前感谢!

6 个答案:

答案 0 :(得分:2)

在Windows for C ++中已经存在这种机制。在dll中编译时,您的函数被“保存”。然后,您可以使用GetProcAddress()从dll“检索”您的函数。

答案 1 :(得分:2)

不,在C ++中没有办法做到这一点。可以允许传输可执行代码的语言包括Erlang,Ruby,TCL。

克里斯

答案 2 :(得分:2)

使用C ++这绝对不可能。

您可以发送包含函数和加载的预编译动态链接库,并在结束点处执行它们。

答案 3 :(得分:2)

C ++是一种静态语言 - 您无法修改正在运行的可执行文件并添加新函数。像Ruby这样的语言允许你这样做,但它不是C ++的一个特性。

如果真的需要,你可以将你的功能放在一个文件中,通过网络发送,让你的程序在另一端编译文件并用你的进程中的popen运行它或者什么......但到那时,这变得非常荒谬。

我会说重新设计所以你不需要这个。

答案 4 :(得分:1)

你可以做到! 只需编写自己的编译器,而不是编译文件,它等待信号,构建文件,然后编译它们。然后可能会运行它们。

基本上:

  1. 发送功能文字
  2. 接收功能文字
  3. 使用您的程序编译文本
  4. 执行已编译的代码
  5. ???
  6. 的利润!

答案 5 :(得分:0)

不,这根本不是有效的。这基本上是不可能的 - 您需要使用某种中间语言或在汇编中表达函数或反汇编生成的二进制文件。