我把之前用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);
同樣把定義中的參數位置也相應的調換下就可以了。