文章类型: VC&C++
关键词: 编译出错,VC6,VS2005,VS2008,VS2010,VS2012,VS2013,VS2015
内容摘要: C2440 “static_cast”: 无法从“void (__thiscall CUICtrView::* )(UINT,UINT)”转换为...

error C2440 “static_cast” 无法从“void (__thiscall C* )(void)...

2016/8/3 15:33:52    来源:apple    阅读:

现象描述:不能转换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)”
        在匹配目标类型的范围内没有具有该名称的函数

解决方法如下:

1、VC6中,说可以把函数在头文件中定义为:
afx_msg void OnProgress()这样 但是在VS2005及以上,要求很严格,必须函数返回值为LRESULT类型,所以在VS2005及以上的高版本的VS中,需要修改为

LRESULT afx_msg OnProgress(WPARAM, LPARAM);

其中,后面两个参数不管用不用得上,都要写。

2、添加消息映射没差别

3、自己写的函数原型如下:

LRESULT CMainFrame::OnProgress(WPARAM wParam,LPARAM lParam) { return TRUE; //注意要返回一个TRUE! }

OK Rebuild,通过~


↑ 上一篇文章:VC6.0 显示代码行号 关键词:VC6.0,,显示,代码,行号,VC 发布日期:2016/8/3 11:03:29
↓ 下一篇文章:VC 禁止显示状态 错误 2440 “static_cast”: 无法从“BOOL (__thiscall CMainFrame::* )(void)”转换为“AFX_PMSG 关键词:VC,,C2440,static_cast,__this.. 发布日期:2016/8/4 9:55:25
相关文章:
解决vs2015生成软件在XP中运行时提示不是有效的WIN32应用程序 关键词:解决,vs2015,VS2013,VS2012,生成软件,XP,运行,提示,不是有效的WIN32.. 发布日期:2019-01-03 11:28
vc6工程以及与vs2010下的vc2010之间的对话框资源复制使用 关键词:对话框资源,vc6,vc2010,vs2010 发布日期:2016-08-02 12:59
WaitForSingleObject和CEvent的结合用法示例 VC6控制台工程 多线程控制 关键词:WaitForSingleObject和CEvent的结合用法示例,VC6控制台工程,多线程控制 发布日期:2017-04-14 13:41
相关目录:.NETVC&C++软件开发
我要评论
正在加载评论信息......