error C2440 不能轉換void (_thiscall CMainFrame::*)(void)to LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)

開發平臺由VC6.0升級至VS2005,需要將原有的項目遷移,可能碰到類似錯誤:
error C2440: 'static_cast' : cannot convert from 'void (__thiscall CMainFrame::* )(void)' to 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)'   

VS2005對消息的檢查更爲嚴格,以前在VC6下完全正常運行的消息映射在VS2005下編譯不通過

ON_MESSAGE(WM_message,OnMyMessage);
   OnMyMessage返回值必須爲LRESULT,其形式爲:afx_msg LRESULT OnMyMessage(WPARAM, LPARAM);如果不符合,則有錯誤提示:
     error C2440: “static_cast”: 無法從“void (__thiscall CPppView::* )(WPARAM,LPARAM)”轉換爲“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
        在匹配目標類型的範圍內沒有具有該名稱的函數
     error C2440: “static_cast”: 無法從“void (__thiscall CPppView::* )(void)”轉換爲“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
        在匹配目標類型的範圍內沒有具有該名稱的函數
解決方法如下:

首先,把原來的消息函數返回值類型改爲LRESULT,函數內可以隨便寫個return TRUE; 然後消息函數的參數必須改寫成(WPARAM wParam,LPARAM lParam)而不論這兩個參數是否用得到;最後,消息映射如ON_MESSAGE(WM_message,& OnMyMessage)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章