error C2440: 'static_cast' : cannot convert from 'void (__thiscall CTCP服务器程序Dlg::* )(WPARAM,LPARAM)'

原创 2013年12月02日 20:56:20

 

在VC6.0下能够运行的代码一由于开发平台的升级可能会导致一些错误的产生,比如今天在进行winsocket编程中在VC6.0下能都运行的代码

自定义消息映射:ON_MESSAGE(WM_SOCKET,OnSocket)

在CTCP服务器Dlg.h中的定义的自定义消息

#define WM_SOCKET WM_USER+100

class CTCP服务器Dlg :public CDialog

{

.... //省略若干代码

protected:

//自定义消息响应函数

afx_msg void OnSocket(WPARAM wParam,LPARAM lParam);

}

void CTCP服务器Dlg::OnSocket(WPARAM wParam,LPARAM lParam)

{

......//省略代码

}

当编译时会产生错误:error C2440: 'static_cast' : cannot convert from 'void (__thiscall CTCP服务器程序Dlg::* )(WPARAM,LPARAM)' to 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)'

在匹配目标类型的范围内没有具有该名称的函数

因为vs2010对消息的检查更为严格,所以虽然上面的代码可以在vc6.0下运行,但是在vs2010下就会出错。

ON_MESSAGE(WM_SOCKET,OnSocket);
OnMyMessage返回值必须为LRESULT,其形式为:afx_msg LRESULT OnMyMessage(WPARAM, LPARAM);如果不符合,则有错误提示:

解决的办法是:

首先,把原来的消息函数返回值类型改为LRESULT,函数内可以随便写个return TRUE; 然后消息函数的参数必须改写成(WPARAM wParam,LPARAM lParam)而不论这两个参数是否用得到;最后,消息映射如ON_MESSAGE(WM_SOCKET,OnSocket)。


error C2440 static_cast:cannot convert from void (_thiscall X::*)(WPARAM,LPARAM)to LRESULT(_thiscall

这个问题应该是VC6项目迁移向高版本时发生的,VC6后消息的检查更为严格,以前在VC6下完全正常运行的消息映射在其它版本下编译不通过。 解决方法如下: 首先,把原来的消息函数返回值...
  • wangluozhangleilei
  • wangluozhangleilei
  • 2012年12月31日 10:33
  • 1449

error C2440: “static_cast”: 无法从“void (__thiscall CXPButton::* )(WPARAM,LPARAM)”转换为“LRESULT (__thisca

不能转换void (_thiscall CMainFrame::*)(void)to LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)2010-05-13 11...
  • kulala082
  • kulala082
  • 2016年12月06日 16:39
  • 151

error C2440: “static_cast”: 无法从“void (__thiscall CChatDlg::* )(WPARAM,LPARAM)

    当用VS2010打开VC6的程序时会出现以下问题:error C2440: “static_cast”: 无法从“void (__thiscall CChatDlg::* )(WPARA...
  • u014023993
  • u014023993
  • 2014年04月02日 14:11
  • 1721

error C2440: “static_cast”: 无法从“void (__thiscall xxxxxx::* )(LON

不能转换void (_thiscall CMainFrame::*)(void)to LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)2010-05-13 11...
  • xin_yu_xin
  • xin_yu_xin
  • 2015年01月29日 00:04
  • 1797

error C2440: ‘static_cast’ : cannot convert from ‘void (__thiscall CSettingStart::* )(BOOL,HANDLE)’

转自VC错误:http://www.vcerror.com/?p=1572 问题描述: 在把VC6.0 工程转到VS2005工程中遇到下面的问题: error C2440: ‘static_...
  • swanabin
  • swanabin
  • 2015年07月04日 17:33
  • 739

2440: “static_cast”: 无法从“void (__thiscall CMainDlg::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd:

开发平台由VC6.0升级至VS2005,需要将原有的项目迁移,这时通常会出现下面这些问题: 1>e:\资料-10\未存储\域名解析-vc++\maindlg.cpp(38): error C2440:...
  • suinichengfeng
  • suinichengfeng
  • 2015年11月02日 13:55
  • 779

error C2440: ‘static_cast’ : cannot convert from ‘UINT (__thiscall CMenuBar::* )(CPoint)’ to ‘LRESUL

转自VC错误:http://www.vcerror.com/?p=1568 问题描述: 在把VC6.0 工程转到VS2005工程中遇到下面的问题: error C2440: ‘static_...
  • swanabin
  • swanabin
  • 2015年07月04日 17:40
  • 1020

error C2440: “static_cast”: 无法从“void (__thiscall CPppView::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscal

转自VC错误:http://www.vcerror.com/?p=1574 问题描述: 在把VC6.0 工程转到VS2005工程中可能遇到以下错误: error C2440: “stat...
  • swanabin
  • swanabin
  • 2015年07月04日 17:28
  • 1052

error C2440: ’static_cast’ : cannot convert from ‘UINT (__thiscall CStaticLink::* )(CPoint)’ to ‘LRE

转自VC错误:http://www.vcerror.com/?p=1539 问题描述: 在把VC6.0 工程转到VS2008工程中遇到下面的问题: error C2440: ’static_...
  • swanabin
  • swanabin
  • 2015年07月03日 15:45
  • 655

错误 1 error C2440: “static_cast”: 无法从“void (__thiscall ClientDlg::* )

不能转换void (_thiscall CMainFrame::*)(void)to LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)2010-05-13 11...
  • hushiwei1993
  • hushiwei1993
  • 2015年04月20日 17:11
  • 1437
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:error C2440: 'static_cast' : cannot convert from 'void (__thiscall CTCP服务器程序Dlg::* )(WPARAM,LPARAM)'
举报原因:
原因补充:

(最多只允许输入30个字)