转帖:http://blog.csdn.net/stilling2006/archive/2010/06/18/5676794.aspx
error C2440: “static_cast”: 无法从“void (__thiscall CChatDlg::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”1> 从基类型到派生类型的强制转换需要 dynamic_cast 或 static_cast
搜索发现为开发平台迁移问题。由vc6.0升级至vs2005以上平台均会遇到这情况,原因为
VS2005对消息的检查更为严格,以前在VC6下完全正常运行的消息映射在VS2005下编译不通过
// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnRecvData(WPARAM wParam, LPARAM lParam); DECLARE_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CChatDlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()//}}AFX_MSG_MAPON_EN_CHANGE(IDC_EDIT_RECV, &CChatDlg::OnEnChangeEditRecv)ON_BN_CLICKED(IDC_BTN_SEND, &CChatDlg::OnBnClickedBtnSend)ON_MESSAGE(WM_RECVDATA, &CChatDlg::OnRecvData ) END_MESSAGE_MAP()
编译错误提示:
error C2440: “static_cast”: 无法从“void (__thiscall CChatDlg::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”1> 从基类型到派生类型的强制转换需要 dynamic_cast 或 static_cast
更改定义:afx_msg void OnRecvData(WPARAM wParam, LPARAM lParam);为afx_msg LRESULT OnRecvData(WPARAM wParam, LPARAM lParam);
编译通过
LRESULT是一个数据类型,MSDN: 32-bit value returned from a window procedure or callback function指的是从窗口程序或者回调函数返回的32位值
补充:在实现函数的时候,程序最后返回0就可以了。
...
afx_msg LRESULT OnRecvData(WPARAM wParam, LPARAM lParam)
{
...
return 0;
}