怎样动态地生成 函数并 调用它

来源:百度知道 编辑:UC知道 时间:2024/05/17 22:58:44
在程序运行过程中,怎么动态的添加新的函数,不是从别的地方调用,而是程序自身生成一个全新的函数,或者,一个函数,在运行过程中,是否可以动态地修改此函数的结构,也就是说重写此函数。

据我所知,计算机运行程序的时候,内存里分了几块,有指令序列区域、和数据区域,数据区域是可以由程序修改的,但指令区域可以由程序自身修改吗???

可写和可执行一般是 不能同时有的
不过windows系统为了调试的需要,提供了一些api接口让你来修改内存区块的属性

参考那本经典的
里面有介绍
<<windows programming>>

动态连接库 DLL 就是类似的东东。
不过一般说来不需要动态生成函数,为了处理不同的函数调用,只要使用函数指针即可,如:

void ShowHello()
{
cout<<"hello world"<<endl;
}

void PrintHello()
{
cout<<"Print hello world"<<endl;
}

typedef void (*FunPtr)();

int main()
{
FunPtr p = 0;
int sel = 0;
if(sel)
p = ShowHello;
else
p = PrintHello;
if(p)
p();
}

这好象不可能的,程序怎么知道你的函数是需要实现什么功能呢?它怎么知道新的函数里要添加什么代码呢,所以它也不可能为你生成新的函数.函数必须要自己去实现的.
动态的加载函数是可以的,但前提是函数必须由你自己来实现代码,而不是程序为你实现.把你的函数放到动态连接库(DLL)里去,程序需要的时候加载连接库,然后调用函数,不需要的时候,释放动态连接库,同时函数也就被销毁.
程序执行的是人的思想,它自己不可能自行修改指令的,就是要修改也必须由人预先设置好,否则这个世界就被电脑统治了.

windows 中一般不采用这种编程方式。
如果你需要调用一些新写的函数,可以在接口处(或者函数的参数中)添加一个函数指针作为参数。