CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

__thiscall 与 __cdecl 区别

楼主f_d_0(ForD)2006-12-02 15:18:46 在 VC/MFC / 基础类 提问

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

相关问题

关键词

得分解答快速导航

  • 帖主:f_d_0

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo