在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);
}

有没有办法能够直接把那个转换过去的阿? 因为我的程序结构已经写成和第一种情况一样了,要改成第二种改动有点大,帮帮忙阿~~
...全文
90 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
WaistCoat16 2009-09-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cyh3798 的回复:]
谢谢大家~~ 我这就给你们加分 来者有份~
[/Quote]

解决没?
程英杭 2009-09-09
  • 打赏
  • 举报
回复
谢谢大家~~ 我这就给你们加分 来者有份~
mstlq 2009-09-09
  • 打赏
  • 举报
回复
只知道入口,不知道参数形式和返回类型?
knop1027 2009-09-09
  • 打赏
  • 举报
回复
typedef void (*FUNC)();

void InvokeFunction(void* addressOfFunc)
{
FUNC Func = (FUNC)addressOfFunc;//这行编译出错
Func();
}

//为了测试,我定义了一个函数
void Test()
{
//todo
}

//然后我在主程序中调用该函数测试下
int main()
{
InvokeFunction(Test);
return 0;
}

要做一下类型转换
  • 打赏
  • 举报
回复
void InvokeFunction(void* addressOfFunc)
{
void (*Func)();
Func = ( void(*)() )addressOfFunc;
Func();
}

加一个强制转化

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧