VC6编写的程序移植到VS2010中编译时error C2440: “static_cast”问题的解决

编写自定义消息映射的时候,VS编译器报错:

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

原因是VC6项目移植到编译时检查更严格的VS2010上,需要针对源代码做出更改,解决方法很简单:

ON_MESSAGE消息在afxmsg_.h中有定义:

// for Windows messages
#define ON_MESSAGE(message, memberFxn) /
 { message, 0, 0, 0, AfxSig_lwl, /
  (AFX_PMSG)(AFX_PMSGW) /
  (static_cast< LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM) > /
  (memberFxn)) }

将不带参的函数声明、实现改为带上两个参数WPARAM,LPARAM:

1、

afx_msg LRESULT OnMsgFunc(WPARAM,LPARAM);

2、

LRESULT CSimpleThreadDlg::OnMsgFunc(WPARAM,LPARAM)
{
 SetDlgItemInt(IDC_DATA, m_ThreadParam.nData);

 return 1;
}

 

再次编译 成功~

 

 

还有一些编译错误是因为UNICODE,可以在工程设置里关闭UNICODE或者在对字符串使用_T()宏

你可能感兴趣的:(c,windows,编译器,2010)