vc0迁移到vs2010中的问题的解决方法_第1页
vc0迁移到vs2010中的问题的解决方法_第2页
vc0迁移到vs2010中的问题的解决方法_第3页
vc0迁移到vs2010中的问题的解决方法_第4页
vc0迁移到vs2010中的问题的解决方法_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 .编译错误 C20651>c: documents and settingsadministrator 桌面期ost_sp3 华electdialog.cpp(62): errorC2065: “i '朱声明的 标识符解决办法,将for (int i = 0; i < m_deviceList.size(); i+)m_ctlDevicelist.AddString(m_deviceListi);中变量i的定义放到函数体开头int i;for (i = 0; i < m_deviceList.size(); i+)m_ctlDevicelist.AddString

2、(m_deviceListi);2.链接错误LNK2019odbccp32.lib(dllload.obj) : error LNK2019:无法解析的外部符号imp vsnprintf ,该符号在函数 _StringVPrintfWorkerA20 中被引用odbccp32.lib是在程序中 对数据库操作时用到的,这个链接问题在使用静态DLL方式时才会遇 到,如果使用共享DLL方式时不会出现,但是因为本程序需要使用静 态DLL方式,所以继续尝 试其他的解决方法。尝试在程序属性的 连接器输入选项中添加附加依 赖项odbccp32.lib,依然 报错。于是在系统中搜索这个lib文件,最终找到了两

3、 种不同版本的odbccp32.lib 。VC6.0中文件信息:EMlSwiEW皆:勺*-|印 TH撰 |C: Program Files Microsoft Visual StudioVC98¥ Lib 9DBCCP32.LIB?1建时闾|i日输6”曰omm刍 区件有为筛整度西J 祠1r冷瘟邮北州停做时间顽玄m硅匾忍aVS2010中文件信息:C: Program Files Microsoft SDKs Windows ¥ v7.0A Lib ¥dbccp32.lib文件名:gram FilesMMiciosaft SDK.sWindoiflsvAOLibadb

4、ccp32.1ilC?创建时间螳i四-12-1E二j 6:旋Z * 假改 时f0|2009-12-166:08;22 ±1从文件信息中可以看出两个文件的版本大小都不同。在程序属性的连接器输入选项中添加附加依赖项 C: Program Files YMicrosoft Visual StudioVC9跄 Lib 寺DBCCP32.L旧,使用VC6.0 版本的 odbccp32.lib,编译连 接成功。但是添加 C: Program Files MicrosoftSDK* WindowsY v7.0A Uib 受dbccp32.lib,使用 VS2010 版本错误依旧会出 现。从上面可以

5、看出 这个链接问题是VC6.0和VS2010中odbccp32.lib版本不同造成的,解决 办法便是在程序属性的 连接器输入选项中添加附加依 赖项C: Program Files YMicrosoft Visual Studio 曲C98¥ Lib 9DBCCP32.L旧,使用 VC6.0 版本的 odbccp32.lib。AniLBiaJ. Cogmi ti oa 届牲勇配置©: |活动ObuQ Hj平舍|活动(E幻二|配置首理禽略所有默队岸 密略特定默认,库 模块定义交件 将模块添加到程序集 族八托管资源文件 茸制箝号引用 筵近加载的dll 程序集链投资濯rLI件文 规

6、A单试毓化入级令 常输清调柔忧匿高命的行I±.i-指定要忝加到帽援命令行献优叫项例如Xrgl3火lil规试+-W持常调具裆息件生生析I 文匡审义攵册单源L览成定定形清资狷浏生自自代Z -:.二BI -:- - Jlj- =-= a = = -= i- = -一-+!=3.编译错误C2664编译后出现大量的C2664错误。1>c: documents and settings administrator 桌面期ost_sp3 Animal cognitiondlg.cpp(949): error C2664:"void ATL:CStringT<BaseType,

7、StringTraits>:Format(const unsigned short*,.) 不能将参数 1 从"const char 3转换为 aconst unsigned short *"1>with1>1>BaseType=wchar_t,1>StringTraits=StrTraitMFC<wchar_t>1>与指向的类型无关;转换要求reinterpret_cast、C样式转换或函数样式转换这个问题在VC6程序升 级到VS2010时都会遇到,原因就是 编码模式的不同。在VC6中,默认 使用MBCS Multi-Byt

8、e Character Set )编码,即多字节字符;而VC8、VC7默认的是Unicode 编码。所以解决办法便是程序属性常 规选项的字符集改 为"Use Multi-Byte Character Set ”即可。 字符基础 ASCII , DBCS , Unicode )所有的string类都是以C-style字符串为基础的。C-style字符串是字符数 组。所以我们先介绍 字符类型。这里有3种编码模式对应3种字符类型。第一种编码类 型是单子节字符集single-byte character set or SBCS )。每种编码 模式下,所有的字符都只用一个字节表示。ASCII是

9、SBCS。一个字节表示的0用来标志SBCS字符串的 结束。第二种编码模式是多字 节字符集(multi-byte character set or MBCS )。一4MBCS编码包含一 些一个字节长的字符,而另一些字符大于一个字 节的长度。用在Windows里的MBCS包含两 种字符类型,单字节字符(single-byte characters )和双字节字符double-byte characters )。由于Windows里使用的多字节字符绝大部分是两个字节长,所 以MBCS常被用DBCS代替。在DBCS编码模式中,一些特定的 值被保留用来表明他 们是双字节字符的一部分。例如,在 Shift

10、-JIS编码中(一个常用的日文 编码模式),0x81-0x9f之间和0xe0-oxfc之间的值表示"这 是一个双字 节字符,下一个子节是这个字符的一部分。”这样的值被称作"leading bytes ",他 们都大于0x7f。跟随在一个leading byte子节后面的字 节被称作"trail byte "。在DBCS中, trail byte可以是任意非 0值。像SBCS 一样,DBCS字符串的 结束标志也是一个 单字节表示 的0。第三种编码模式是Unicode。Unicode是一种所有的字符都使用两个字 节编码的编码模式。Unicode字符

11、有时也被称作宽字符,因为它比单子节字符宽(使用了更多的存储空间)。注意, Unicode不能被看作 MBCS。MBCS的独特之处在于它的字符使用不同 长度的字节编码。Unicode字符串使用两个字 节表示的0作为它的结束标志。单字节字符包含拉丁文字母表,accented characters及ASCII标准和DOS操作系统定义的 图形字符。双字节字符被用来表示 东亚及中东的语言。Unicode被用在COM及Windows NT操作系统内部。你一定已经很熟悉单字节字符。当你使用char时,你处理的是单字节字符。双字节字符也用 char类型来进行操作(这是我们将会看到的 关于双子节字符的很多奇怪的

12、地方之一)。Unicode 字符用wchar_t来表示。Unicode字符和字符串常量用前 缀L来表示。_WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)产生这个错误的原因是原因是_WIN32_WINNT 的版本定 义太老,老的VC代码对_WIN32_WINNT 的典型设置是:#ifndef_WIN32_WINNT#define _WIN32_WINNT 0x0400#endif解决办法为在stdafx.h中添加宏定 义。#ifndef_WIN32_WINNT#define _WIN32_W

13、INNT 0x0502#endif备注:必须在stdafx.h中所有#include文件之前添加此代码。5 .警告 C4018>c: documents and settings administratorhost_sp3 甚electdialog.cpp(58): warningC4018:“”有符号/无符号不匹配出错代码int i;for (i = 0; i < m_deviceList.size(); i+)m_ctlDevicelist.AddString(m_deviceListi);出错原因分析:m_deviceList 是一个 Vector 容器,m_deviceLi

14、st.size()在容器说明中被定义为:unsigned int类型,而i是int类型,所以会出现:有符号7无符号不匹配 警告解决办法:定义i为unsigned类型后就可以了。6 .警告 C49961>Animal Cognition.cpp(56): warning C4996: 'CWinApp:Enable3dControls':CWinApp:Enable3dControls is no longer needed. You should remove this call.1>D: Program Files Microsoft Visual Studio1

15、0.0 WCatlmfc include afxwin.h(5344):参见"CWinApp:Enable3dControls 的声明 出错代码:#ifdef _AFXDLLEnable3dControls();/ Call this when using MFC in a shared DLL#elseEnable3dControlsStatic(); / Call this when linking to MFC statically#endif这两个函数的调用是旧的MFC版本对新版本的操作系统特性的支持,在新的(那个时候是新 的)Windows 95平台上要 这样调用一下才能使

16、用新的 Windows 3D 样式的控件,否则就是老 的Win 3.2样子的控件。对于新的MFC版本来 说已经不需要再 调用这两个函数了,可以用 _MSC_VER 对其隔离:#if _MSC_VER <= 1200 / MFC 6.0 or earlier#ifdef _AFXDLLEnable3dControls();/ Call this when using MFC in a shared DLL#elseEnable3dControlsStatic(); / Call this when linking to MFC statically#endif#endif7 .警告 C49

17、961>Animal CognitionDlg.cpp(207): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.1>D: Program Files Microsoft Visual Studio 10.0VCWinclude string.h(105):

18、 参见"strcpy的声明这种微软的警告,主要因为那些C库的函数,很多函数内部是不 进行参数检测的(包括越界类 的),彳敝担心使用这些会造成内存异常,所以就改写了同样功能的函数,改写了的函数 进行了参数的检测,使用这些新的函数会更安全和便捷。关于这些改写的函数你不用 专门去记忆,因为编译器对于每个函数在给出警告时,都会告诉你相应的安全函数,查看警告信息就可以 获知, 在使用时也再查看一下MSDN详细了解。库函数改写例子:mkdir 改写为 _mkdirfopen ”改写为 fopen_sstricmp 改写为 stricmp_sstrcpy 改写为 strcpy_s8. sdf文件和ipch文件夹的处理vs2010打开某个工程,转换成功之后,在工程目 录看见一个sdf文件和一个ipch文件夹,都 超大(起码几十M),一个几百k的工程,结果用v

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论