不能轉換void (_thiscall CMainFrame::*)(void)to LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)2010-05-13 11:35開(kāi)發(fā)平臺由VC6.0升級至VS2005,需要將原有的項目遷移,可能碰到類(lèi)似錯誤:
error C2440: 'static_cast' : cannot convert from 'void (__thiscall CMainFrame::* )(void)' to 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)'
VS2005對消息的檢查更為嚴格,以前在VC6下完全正常運行的消息映射在VS2005下編譯不通過(guò)
ON_MESSAGE(WM_message,OnMyMessage);
OnMyMessage返回值必須為L(cháng)RESULT,其形式為:afx_msg LRESULT OnMyMessage(WPARAM, LPARAM);如果不符合,則有錯誤提示:
error C2440: “static_cast”: 無(wú)法從“void (__thiscall CPppView::* )(WPARAM,LPARAM)”轉換為“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
在匹配目標類(lèi)型的范圍內沒(méi)有具有該名稱(chēng)的函數
error C2440: “static_cast”: 無(wú)法從“void (__thiscall CPppView::* )(void)”轉換為“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
在匹配目標類(lèi)型的范圍內沒(méi)有具有該名稱(chēng)的函數
解決方法如下:
首先,把原來(lái)的消息函數返回值類(lèi)型改為L(cháng)RESULT,函數內可以隨便寫(xiě)個(gè)return TRUE; 然后消息函數的參數必須改寫(xiě)成(WPARAM wParam,LPARAM lParam)而不論這兩個(gè)參數是否用得到;最后,消息映射如ON_MESSAGE(WM_message,& OnMyMessage)
聯(lián)系客服