error C2440: “static_cast”: 无法从“LRESULT (__thiscall CMyReceiveDlg::* )(LPARAM,WPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
我把之前用VC++6.0上写的程序移植到VS2010或VS2012上时偶尔会碰到下面这种情况。
有这样的错误提示:
error C2440: “static_cast”: 无法从“LRESULT (__thiscall CMyReceiveDlg::* )(LPARAM,WPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
我看了下LPARAM、WPARAM、LRESULT的区别
例如:
声明:
LRESULT OnDrawItem(LPARAM lparam, WPARAM wparam);
定义:
LRESULT CMyReceiveDlg::OnDrawItem(LPARAM lparam, WPARAM wparam) { CMyProgressDlg dlg; HWND pHwnd = this->GetSafeHwnd(); CWnd *pWnd=FindWindow(NULL,"Progress"); if(lparam == 1) { dlg.m_message = "正在连接邮箱服务器,\n请稍后……"; dlg.DoModal(); } else if(lparam == 2) { pWnd->SendMessage(WM_CLOSE); dlg.m_message = "连接成功,\n正在获取邮件……"; dlg.DoModal(); } else if(lparam == 3) { pWnd->SendMessage(WM_CLOSE); } else if( lparam == 4) { int nListItem = m_list.InsertItem(i, (const char*)g_bstrFrom); m_list.SetItem(nListItem, 1, LVIF_TEXT, (const char*)g_bstrSubject, 0, 0, 0, NULL); m_list.SetItem(nListItem, 2, LVIF_TEXT, (const char*)g_oleDate.Format("%Y-%m-%d"), 0, 0, 0, NULL); } return 0; }
错误提示:
error C2440: “static_cast”: 无法从“LRESULT (__thiscall CMyReceiveDlg::* )(LPARAM,WPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
我看了下LPARAM、WPARAM、LRESULT的区别
typedef UINT_PTR WPARAM; typedef LONG_PTR LPARAM; typedef LONG_PTR LRESULT;
解决方法:
将参数的顺序调换下即把
LRESULT OnDrawItem(LPARAM lparam, WPARAM wparam); //改成 LRESULT OnDrawItem(WPARAM wparam,LPARAM lparam);
同样把定义中的参数位置也相应的调换下就可以了。