邀朋友种豆,一起分享吧
喜欢购买正品行货?那就去品牌街

如何让类的成员函数作为回调函数?

来自:种豆 时间:2017-12-29 阅读:701次 原文链接

    在定义类的成员函数做为回调函数有时候会出现以下错误:

error C3867:“classX::functionY”: 函数调用缺少参数列表;请使用“&classX::functionY”创建指向成员的指针

    出现此问题,可参考以下解决办法:

    1. 类成员函数不能作为回调函数的主要原因在于类成员函数使用__thiscal参数传递方式,因此需要调用者(caller)通过ecx寄存器提供类对象的指针。而回调函数使用__stdcall参数传递方式,不具备这个特点。

    所以想办法在类成员函数被调用之前设置好ecx寄存器,就能在__stdcall调用的基础上模拟出一个完好的__thiscall调用。

    2. 使用静态成员函数,静态成员函数不使用this指针作为隐含参数,这样就可以作为回调函数了。

    3. 不使用成员函数,直接使用普通C函数,为了实现在C函数中可以访问类的成员变量,可以使用友元操作符(friend),在C++中将该C函数说明为类的友元即可。这种
处理机制与普通的C编程中使用回调函数一样。

 

 
关于种豆 ┊ 联系我们 ┊ 免责声明 ┊ 发帖须知 ┊ 请提意见 ┊ 站点地图
本站为个人爱好兴趣分享网站,不代表本人观点,如有侵权请联系QQ3033380280进行处理
sowsoy.com 版权所有 Copyright©2010-2021 备案号:蜀ICP备2020025376号-3
Email:sowsoy#hotmail.com