__thiscall 与 __cdecl 区别
Class CTestFrmA : public CDialog
{
Public:
int (*TestABC)(CString strData);
...
...
}
Class CTestFrmB : public CDialog
{
Public:
int TestBCD(CString strData);
...
...
}
错误的地方是:
m_FrmTestA.TestABC = TestBCD;
error C2440: '=' : cannot convert from 'int (__thiscall CTestDlg::*)(class CString)' to 'int (__cdecl *)(class CString)'
我在一个Dialog(CTestFrmB)的初始化函数中创建了另一个窗体(CTestFrmA),并想设置另一个窗体(m_FrmTestA)里面的一个回调函数.
问题点数:20、回复次数:4Top
1 楼lurenfu(具有中国特色的社会主义初级阶段,一百年不变)回复于 2006-12-02 15:37:13 得分 0
Class CTestFrmB : public CDialog
{
Public:
int TestBCD(CString strData);
...
...
}
该类中的TestBCD是CTestFrmB的成员函数,签名和int (*TestABC)(CString strData);显然不一样
int CTestFrmB::TestBCD( CTestFrmB *this, CString strData ); __thiscall
int (*TestABC)(CString strData); __cdecl call
Top
2 楼f_d_0(ForD)回复于 2006-12-02 15:56:54 得分 0
to lurenfu:
谢谢,您的解释,您告诉我了原因,但是这个问题解决方法是什么呢?
我怎么才能用"回调函数".怎样才能让TestA去使用TestB的函数.Top
3 楼zmx0506(风之伤)回复于 2006-12-02 16:15:12 得分 0
最好用动态创建
RUNTIME_CLASS();
Top
4 楼wltg2001(红猪)回复于 2006-12-02 17:08:50 得分 0
回调函数不能是成品函数,但是可以是静态成员函数,改成:static int TestBCD(CString strData);Top




