码迷,mamicode.com
首页 > 编程语言 > 详细

用函数的地址调用函数 C++ MFC

时间:2016-09-12 06:14:57      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

先说一段废话,幸亏我汇编基础(基础 基础 基础)扎实,否则这个问题真的恶心到我了
正题  因为有特殊需求, 需要写一个类似于接口的功能,但是因为用到的次数不多再加上C++写接口各种麻烦
所以想通过函数的地址调用该函数,并且能正常的传递参数.但调用过程和被调函数是不在一个类的,调用起来又是各种麻烦
这几天我翻烂了百度, 都没找到方法,什么函数回调啊,通过函数地址调用函数啊,还有什么接口之类的
天......
最后想起来我之前用过的易语言里有人写过这个功能,打算拷贝过来,但是也有不足(稍后会说),先上翻译成C++的代码,易语言的就不贴了


int ___CALL(int a, int *b=NULL, int *c=NULL, int* d=NULL, int* e=NULL, int* f=NULL, int* g=NULL, int* h=NULL, int* i=NULL, int* j=NULL)
//a是函数地址,后面的变量是该函数需要的参数,多余的可以省略为NULL
{
__asm
{
leave
pop eax
xchg[esp], eax
jmp eax
}
return 0;
}

这个方法经过我多方面的证明,是可以用的(VS2015的C++ MFC中),在Debug中会有ESP被未知调用的警告,Release中则无其他问题
技术分享如图
但是,当a函数的参数多余1个时(参数个数>1),这个就回报错 

 如图技术分享
这样的话,我们用起来就各种不方便,当参数个数大于等于2个 的时候,这个方法完全不能用
而网上也没有一个合适的解决方法


因为之前有写过小型外挂的经验,对汇编稍微有些了解,在调用函数(子程序,方法)的时候,只要保证前后堆栈平衡,就几乎不会出错
所以,一气之下就自己写一个这个功能出来,放在外面,供大家使用~希望转载的时候请注明我的版权
风飘红技术中心  QQ:515973568
下面就放代码(CSDN的代码我稍后会来补,MSDN代码上传和刷新有延迟)

用函数的地址调用函数 C++ MFC

标签:

原文地址:http://www.cnblogs.com/fengpiaohong/p/5863423.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!