vs2013问题总结 联系客服

发布时间 : 星期五 文章vs2013问题总结更新完毕开始阅读5bf067d6ed630b1c58eeb512

static_cast 无法从“void (__thiscall CREBot* )(WPARAM,LPARAM)”转换

不能转换void (_thiscall CMainFrame::*)(void)to LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)2014-07-13 11:35开发平台由VC6.0升级至VS2010,需要将原有的项目迁移,可能碰到类似错误: 错误 1 error C2440: “static_cast”: 无法从“void (__thiscall CREBot6VDlg::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)” c:\%users\\lyd\\desktop\\rbt\\标准6dof机器人\\rebot6vdlg.cpp 187 1 REbot6V_2008

VS2010对消息的检查更为严格,以前在VC6下完全正常运行的消息映射在VS2010下编译不通过

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) //&好像没必要 将afx_msg void OnTeachButtonUp(WPARAM wParam, LPARAM lParam); 改为afx_msg LRESULT OnTeachButtonDown(WPARAM wParam, LPARAM lParam);

将 void CSetHomeDialog::OnTeachButtonUp(WPARAM wParam, LPARAM lParam) 改为

LRESULT CSetHomeDialog::OnTeachButtonUp(WPARAM wParam, LPARAM lParam) 并在函数体内加return TRUE;

21

警告 1 warning C4996: 'MBCS_Support_Deprecated_In_MFC': MBCS support in MFC is deprecated and may be removed in a future version of MFC. c:\\microsoft visual studio 12.0\\vc\\atlmfc\\include\\afx.h 38 1 REbot6V_2008

“ATL::CStringT>>::CStringT”: 对重载函数的调用不明确 d:\\vsprj\\edit\\vcedit\\icredit\\mainfrm.cpp 848 1 icrEdit

ReadHuge”: 不是“CFile”的成员

错误 6 error C2039: “ReadHuge”: 不是“CFile”的成员 d:\\vsprj\\edit\\vcedit\\icredit\\mainfrm.cpp 1253 1 icrEdit

遇到这种情况的解决方法把代码中的ReadHuge换成Read、WriteHuge换成Write即可。

原因是VC++2005及后续VC版本中的CFile没有ReadHuge和WriteHuge成员函数,只在VC6中的CFile才有,不过ReadHuge()函数已被Read()函数代替,WriteHuge()函数已被Write()函数代替。

22

PARAFORMAT 如何转换为 PARAFORMAT2??

错误 13 error C2664: “BOOL CRichEditView::SetParaFormat(PARAFORMAT2 &)”: 无法将参数 1 从“PARAFORMAT”转换为“PARAFORMAT2 d:\\vsprj\\edit\\vcedit\\icredit\\syneditview.cpp 350 1 icrEdit

//设置TAB间隔

PARAFORMAT pf ;

pf.cbSize = sizeof(PARAFORMAT); pf.dwMask = PFM_TABSTOPS ; pf.cTabCount = MAX_TAB_STOPS; SynCtrl.GetParaFormat( pf );

int nSynCtrlTabSize = pf.rgxTabs[0]; if(nSynCtrlTabSize == 0) nSynCtrlTabSize = 720; ????

SetParaFormat( pf ); // 要求PARAFORMAT2

------解决方案-------------------- //设置TAB间隔 PARAFORMAT pf ;

pf.cbSize = sizeof(PARAFORMAT); pf.dwMask = PFM_TABSTOPS ; pf.cTabCount = MAX_TAB_STOPS; SynCtrl.GetParaFormat( pf );

int nSynCtrlTabSize = pf.rgxTabs[0]; if(nSynCtrlTabSize == 0) nSynCtrlTabSize = 720; ????

SynCtrl.SetParaFormat( pf ); // 要求PARAFORMAT2

23

&”

24