从VC++到VS的开发平台转换十分常见,特此记录下可能有参考价值的报错与应对方法,供参考。
我所转换的项目是一个带有GUI界面的机器人控制程序,原本在VC6平台上开发,并且可以正常运行。从学长那里拷贝到我的新电脑后,我希望用VS2010继续开发,因此实行了这次平台转换。首先双击 .dsw 文件,VS2010将会有如下提示:
选择“是”,将VC工程转化为VS2010项目。转化完成后如下:
直接F5调试,弹出提示:
选择“是”。之后我遇到了以下报错:
1)error C2440: “static_cast”: 无法从“BOOL (__thiscall CXWRobotDlg::* )(void)”转换为“AFX_PMSG”
在匹配目标类型的范围内没有具有该名称的函数
解决方法:由于VC++自动添加的消息处理函数返回值默认是void,所以需要把对应函数的返回值改为void即可。
1.点击右键转到位置,本例中是:
</pre><pre name="code" class="cpp"> afx_msg bool OnBUTTONOpenDevice();
afx_msg bool OnBUTTONDeviceSettings();
其中OnBUTTONOpenDevice与OnBUTTONDeviceSettings是BOOL型,需要改写成void.
2.右键OnBUTTONOpenDevice转到声明: afx_msg BOOLOnBUTTONOpenDevice(); 改为 afx_msg void OnBUTTONOpenDevice();
3.右键OnBUTTONOpenDevice转到定义
BOOL CXWRobotDlg::OnBUTTONOpenDevice()
{
// TODO: Add your control notification handler code here
HANDLE hNewKeyHandle;
//OpenDevice
hNewKeyHandle = VCS_OpenDeviceDlg(&m_dErrorCode);
if(hNewKeyHandle)
{
//Close Previous Device
if(m_KeyHandle) VCS_CloseDevice(m_KeyHandle,&m_dErrorCode);
m_KeyHandle = hNewKeyHandle;
// if(SetTimer(1,100,NULL)) m_oUpdateActive = TRUE;
return TRUE;
}
else
{
AfxMessageBox("Can't open device!"