VC6-VC2008转移到VC2015问题记录

问题1

Buildingan MFC project for a non-Unicode character set is deprecated

解决方法

用于多字节字符编码(MBCS) MFC (DLL) 不再包含于Visual Studio 中,但是可用作插件,您可以在任何装有Visual Studio ProfessionalVisualStudio Premium Visual Studio Ultimate 的计算机上下载和安装。(在Visual Studio 中,必须启用MFC。)安装需要大约440 MB 磁盘空间,包括英语(美国)和DLL 的本地化版本。

在安装MBCS DLL 后,如果卸载或修复Visual Studio,则还会卸载或修复。 但是,如果只禁用 MFCMBCS DLL 仍会保留在系统上。 如果仅卸载或修复 MBCS DLL,将不会修改 VisualStudio

总结下就是安装  Multibyte MFC Library for Visual Studio 2013

详细信息:http://blogs.msdn.com/b/vcblog/archive/2013/07/08/mfc-support-for-mbcs-deprecated-in-visual-studio-2013.aspx           

下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=40770

 

问题2

warning C4996:'MBCS_Support_Deprecated_In_MFC': MBCS support in MFC is deprecated and may beremoved in a future version of MFC.

解决方法

这个链接http://go.microsoft.com/fwlink/p/?LinkId=279048文中提到可以通过将NO_WARN_MBCS_MFC_DEPRECATION 预处理器定义添加到您的项目生成定义消除此警告。在项目stdafx.h文件中的#pragmaonce下面添加

#define NO_WARN_MBCS_MFC_DEPRECATION

 

问题3

errorC1189: #error : MFC does not support WINVER less than 0x0501. Please change thedefinition of WINVER in your project properties or precompiled header.  

解决方法

stdafx.h文件中的

#define WINVER 0x0400      

#define WINVER 0x0501       

#define _WIN32_WINNT 0x0400    

改为  

#define _WIN32_WINNT 0x0501  

 

问题4

错误 LNK1295 “/OPT:NOREF”“/LTCG:incremental”规范不兼容;链接时不使用“/LTCG:incremental”

解决方法

链接器->优化

VC6-VC2008转移到VC2015问题记录

VC6-VC2008转移到VC2015问题记录

 

问题5

LNK4075: ignoring '/EDITANDCONTINUE'due to '/SAFESEH' specification

LNK1281 无法生成 SAFESEH影像

LNK2026 模块对于SAFESEH映像是不安全的。

解决方法

VC6-VC2008转移到VC2015问题记录

 

开始在命令行进行设置
/SAFESEH:NO

问题6

vs2015编译工程无法通过,odbccp32.lib(dllload.obj) : errorLNK2019: 无法解析的外部符号 __vsnwprintf_s,

说明vs2015确实这个库,解决办法:

1)在vs2015安装文件夹Lib文件放入odbccp32.lib文件

2)打开编译文件,项目\属性\连接器\输入\附加依赖里面输入

D:\Program Files (x86)\Microsoft VisualStudio 14.0\lib\odbccp32.lib

 

问题7

error:LNK2005 已经在*.obj中定义

解决方法:

说明你工程中的类的函数与新的vs2015中某个xxx.lib有冲突,修改你工程的类名称为一个特殊的名字。

 

问题8

VC2015包含stdint.h头文件冲突问题

比如:

出现“C:\Program Files (x86)\Microsoft Visual Studio14.0\VC\include\stdint.h(17): error C2632: “char”后面的“char”非法”错误。stdint.h文件17行是typedef signedchar        int8_t;

解决方法:

先查找工程中引用int8_t的地方,屏蔽掉这段代码,增加 #include<cstdint>

总的解决方法如下:
Features of C standard Library are also provided in the C++ Standard libraryand as a general naming convention they are pre-pended by an c to thecorresponding names in C standard library.
In C++, You should be using:
#include <cstdint>
and fully qualify the symbol names you use with std::
while in C, You should use:
#include <stdint.h>

https://*.com/questions/13642827/cstdint-vs-stdint-h

 

问题9

在工程子目录中包括#include "stdafx.h" ,并且包含了一些VC的类函数非WIN32标准函数,容易出现预编译不对问题。

解决方法:

1)、包含目录,全路径

#include"../stdafx.h"

 

 

2)、将cpp文件预编译修改成不使用。

问题10
怎么让VS2015编写的程序在XP中顺利运行
参考下面这篇文章
https://blog.****.net/liuyez123/article/details/51497104

 

VS2015开发XP程序的设置

1). 项目菜单->项目属性->配置属性->常规->平台工具集,选择“VS2013WindowsXP(v120_xp)”;

VC6-VC2008转移到VC2015问题记录

 

2). 项目菜单->项目属性->配置属性->常规->MFC的使用,选择使用标准Windows库;如果选用静态库编译的话选用静态库中选用MFC。
3). 项目菜单->项目属性->配置属性->常规->字符集中使用多字节字符集或使用Unicode字符集
4). 项目菜单->项目属性->链接器->系统->子系统->控制台或窗口windows(根据你的项目类型选择),第二项版本号设成5.01。

VC6-VC2008转移到VC2015问题记录


实际测试的时候这两项不设置也可以,连接器和自动匹配。
5). C/C++->链接器->命令行,输入相应的命令行,这一步非常关键,否则会出现“不是有效的win32应用程序”提示;

 

VC6-VC2008转移到VC2015问题记录


根据程序设计的运行环境是图形窗口还是命令行窗口设置不同的命令行选项,如果运行环境是命令行窗口则使用如下命令:

 

/SUBSYSTEM:CONSOLE,”5.01” (for Win32用在32位平台)
/SUBSYSTEM:CONSOLE,”5.02” (for x64用在64平台)

如果运行环境是图形窗口则使用如下命令:

/SUBSYSTEM:WINDOWS,”5.01” (for Win32用在32位平台)
/SUBSYSTEM:WINDOWS,”5.02” (for x64用在64平台)

现在就可以编译运行程序了,试试看吧。

 

VC6-VC2008转移到VC2015问题记录

问题11

在Visual Studio2015使用Boost库的时候,出现如下错误:
error C4996: 'std::copy::_Unchecked_iterators::_Deprecate': Call to 'std::copy' with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'1

解决办法 
在工程属性—>C/C++—>命令行—>其他选项 中添加: 
-D_SCL_SECURE_NO_WARNINGS