在Windows环境下,C++中只知道函数入口地址,如果执行该函数?
程英杭 2009-09-09 08:49:52 大家帮帮忙阿~ 我现在想写一个函数,这个函数,通过一个函数的入口地址,执行该函数,我在linux下面很容易就实现了,但是拿到Windows上编译就通不过了,说类型转换无效。我的目的是做到linux和windows下面用同样的方法实现。
比如,我定义了一个函数
如我希望通过定义这个执行函数,这个函数能够执行void (*Func)()这样定义的函数。
于是,我定义了如下函数。
void InvokeFunction(void* addressOfFunc)
{
void (*Func)();
Func = addressOfFunc;//这行编译出错
Func();
}
//为了测试,我定义了一个函数
void Test()
{
//todo
}
//然后我在主程序中调用该函数测试下
int main()
{
InvokeFunction(Test);
return 0;
}
这段代码在linux上可以编译通过,但是到了windows的VC的环境中编译就通不过了,怎么办啊?提示的错误是
error C2440: '=' : cannot convert from 'void *' to 'void (__cdecl *)(void)'
难道windows上面一定要把程序改成如下形式?
void InvokeFunction(void(*Func)())
{
Func();
}
//为了测试,我定义了一个函数
void Test()
{
//todo
}
//然后我在主程序中调用该函数测试下
int main()
{
InvokeFunction(Test);
}
有没有办法能够直接把那个转换过去的阿? 因为我的程序结构已经写成和第一种情况一样了,要改成第二种改动有点大,帮帮忙阿~~