请问大虾,如何让类的成员函数作为回调函数??
对于下面的类,我想让Show也作为它的成员函数,又作为SetTimer的回调函数。一般形式的成员函数会出错,怎么去做啊?各位大虾帮帮忙,不胜感激!classGraph{v...
对于下面的类,我想让Show也作为它的成员函数,又作为SetTimer的回调函数。一般形式的成员函数会出错,怎么去做啊?各位大虾帮帮忙,不胜感激!
class Graph
{
void SetTimer(CWnd* pWnd)
{
m_pWnd->SetTimer(m_timerID, m_elapse, Show);
}
} 展开
class Graph
{
void SetTimer(CWnd* pWnd)
{
m_pWnd->SetTimer(m_timerID, m_elapse, Show);
}
} 展开
2个回答
2013-09-13
展开全部
给你三个思路。
1. 类成员函数不能作为回调函数的主要原因在于类成员函数使用__thiscal参数传递方式,因此需要调用者(caller)通过ecx寄存器提供类对象的指针。而回调函数使用__stdcall参数传递方式,不具备这个特点。
所以想办法在类成员函数被调用之前设置好ecx寄存器,就能在__stdcall调用的基础上模拟出一个完好的__thiscall调用。
2. 使用静态成员函数,静态成员函数不使用this指针作为隐含参数,这样就可以作
为回调函数了。
3. 不使用成员函数,直接使用普通C函数,为了实现在C函数中可以访问类的成员变
量,可以使用友元操作符(friend),在C++中将该C函数说明为类的友元即可。这种
处理机制与普通的C编程中使用回调函数一样。
1. 类成员函数不能作为回调函数的主要原因在于类成员函数使用__thiscal参数传递方式,因此需要调用者(caller)通过ecx寄存器提供类对象的指针。而回调函数使用__stdcall参数传递方式,不具备这个特点。
所以想办法在类成员函数被调用之前设置好ecx寄存器,就能在__stdcall调用的基础上模拟出一个完好的__thiscall调用。
2. 使用静态成员函数,静态成员函数不使用this指针作为隐含参数,这样就可以作
为回调函数了。
3. 不使用成员函数,直接使用普通C函数,为了实现在C函数中可以访问类的成员变
量,可以使用友元操作符(friend),在C++中将该C函数说明为类的友元即可。这种
处理机制与普通的C编程中使用回调函数一样。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-09-13
展开全部
在函数体中调用函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询