编写自定义消息映射的时候,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()宏
VC6程序移植到VS2010的C2440静态类型转换错误解决方案

将VC6项目移植到VS2010时,遇到静态类型转换错误C2440,主要涉及到ON_MESSAGE消息映射。解决方法包括修改函数声明和实现,为无参数函数添加WPARAM, LPARAM参数,并调整消息处理函数以符合新的编译器要求。此外,针对UNICODE导致的编译问题,可以通过修改工程设置或使用_T()宏来解决。"
132002622,5891101,使用Matlab计算点云密度的步骤与代码,"['点云处理', 'Matlab编程', '计算机视觉', '数据处理']
最低0.47元/天 解锁文章
1405

被折叠的 条评论
为什么被折叠?



