您的位置 首页 > 娱乐休闲

程序员日志,将VC6.0下的项目整体迁移到VS2010,吐血解决方案

近期,因为工作的需要,要把一个在VC6.0下开发的项目整体迁移到VS2010下面去,这个工程已经创建并更新维护差不多十多年的时间了,经手人数不胜数,里面的东西更是千奇百怪,想到这些就头皮发麻,不过,工作嘛,该做还是要做的。

果然,用2010打开了dsw文件后,重新编译时,提示出了无数的错误与异常,看的头皮发麻,只能耐下心来,仔细分析,逐个修改,发现基本就以下8大类型的错误。

  1. fatal error C1083: 无法打开包括文件:“”: No such file or directory

    修改方法:将#include "" 修改为

    #include <fstream>

    using namespace std;

  2. error C2440: “static_cast”: 无法从“LRESULT (__thiscall CGpsView::* )(WPARAM,LPARAM)”转换为“AFX_PMSG”,在匹配目标类型的范围内没有具有该名称的函数

    error C2440: “static_cast”: 无法从“void (__thiscall CGpsView::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”, 在匹配目标类型的范围内没有具有该名称的函数

    解决方法:vs2010下对函数的结构要求比较严格,On_MEssage类型函数, 返回类型为LRESULT,要有参数和返回值 WPARAM,LPARAM;ON_COMMAND 类型函数,返回类型为 void, 且不能有参数,因此,第一个Error把 ON_COMMAND 改为 On_MEssage 就可以了;第二个把返回值类型改为 LRESULT即可。

  3. error C2664: “IsInTimeCode”: 不能将参数 1 从“CTimeCodesList *”转换为“const CTimeCodesList *&” 转换丢失限定符。

    解决方法:比较简单,强制类型转换即可,CTimeCodesList *pTimeCodesList; 改为 const CTimeCodesList *pTimeCodesList;

  4. error C2065: “i”: 未声明的标识符

    解决方法:变量作用域的问题,所以在for或if语句之前定义int i = 0 ;即可

  5. verror C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int

    解决方法:在默认定义时,直接定义为int

  6. error C2039: “WriteHuge”: 不是“CFile”的成员

    解决方法:函数发生了变更,因此将ReadHuge()改为Read(),WriteHuge()改为Write()

  7. error C2668: “pow”: 对重载函数的调用不明确

    c:\program files (x86)\microsoft visual studio 10.0\vc\include\ma(583): 可能是“long double pow(long double,int)”

    c:\program files (x86)\microsoft visual studio 10.0\vc\include\ma(535): 或 “float pow(float,int)”

    c:\program files (x86)\microsoft visual studio 10.0\vc\include\ma(497): 或 “double pow(double,int)”

    尝试匹配参数列表“(LONG, int)”时

    解决方法:重载函数参数类型与定义不匹配,使用强制类型转换就可以了。

  8. LIBCMT.lib) : error LNK2005: _sprintf 已经在 m) 中定义

    LIBCMT.lib) : error LNK2005: __invoke_watson 已经在 m) 中定义

    LIBCMT.lib) : error LNK2005: __invalid_parameter 已经在 m) 中定义

LIBCMT.lib) : error LNK2005: __vsnprintf_s 已经在 m) 中定义

解决方法:这个问题时默认库与其他库冲突,解决方法如下:

解决方法

配置属性-〉C/C++->代码生成 -〉运行时库,改为多线程/MD

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“vs2010如何设置静态变量”边界阅读