error C2440: “static_cast”: 无法从“void (__thiscall CChatDlg::* )(WPARAM,LPARAM)

来源:互联网 发布:网络培训机构北京 编辑:程序博客网 时间:2024/05/25 20:01


   当用VS2010打开VC6的程序时会出现以下问题:error C2440: “static_cast”: 无法从“void (__thiscall CChatDlg::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
从基类型到派生类型的强制转换需要 dynamic_cast 或 static_cast
   由VC++6.0升级至VS2005以上平台均会遇到这情况,原因为:VS2005及以上版本的VS对消息的检查更为严格,以前在VC6++下完全正常运行的消息映射在VS2005及以上版本的VS下编译不通过。

   解决方法:假设自定义消息WM_RECVDATA,该消息发送给CChatDlg,那么需要修改:

   1:将afx_msg void OnRecvData(WPARAM wParam,LPARAM lParam) 修改为afx_msg LRUSULT OnRecvData(WPARAM wParam,LPARAM lParam)

   2:将BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间的ON_MESSAGE(WM_RECVDATA,OnRecvData)修改为ON_MESSAGE(WM_RECVDATA,&CChatDlg::OnRecvData);

   3:将OnRecvData的定义函数void CChatDlg::OnRecvData(WPARAM wParam,LPARAM lParam)修改为
LRESULT CChatDlg::OnRecvData(WPARAM wParam,LPARAM lParam),在具体的实现代码中{}中,返回值:return 0;


0 0