您是否知道在 VC ++ 6 / Win32 项目转换为 VS2010 C ++ / Win32 项目类型期间突出显示已知或可能出现的问题的资源?我对各种问题感兴趣:
否则,如果您已经执行了那种迁移,那么您遇到了哪些问题?
谢谢
答案 0 :(得分:5)
VC ++ 6具有非标准的异常处理。我们遇到了一些问题,因为我们的代码包含:
try {
//Some code
}
catch (...) {
//Handle error
}
在VS2008中编译后,一些开发人员依赖于这种破坏的行为,我们的应用程序崩溃严重。
这个article解释得很清楚以及如何解决这个问题。
答案 1 :(得分:3)
首先,这些问题高度依赖于代码质量以及古代代码如何适应VC ++ 6编译器的“功能”。
无法直接将.dsp
转换为VS 2010格式(at least with the express editions),您必须通过2008才能转换。
转换向导应该发出警告并告知您可能存在的任何问题。我没有经历过这个过程,但我认为编译器开关是你最不担心的。一般来说,我希望错误的代码会产生更多你需要担心的错误。
关于您的具体问题:
旁注:我不是说旧代码 不好,只是关于VC ++ 6的很多问题都是由于代码质量不好造成的/一致性。
答案 2 :(得分:3)
嘿,vs6允许你在循环范围之外使用循环变量。即:
for ( int i=0; i<10; i++ )
{
if( i == 5 )
break;
}
int iVal = i;
任何事情都会失败&gt; vs6 :)在2005年和2010年失败 - 虽然有一个编译器设置可以让你再次强制这种行为(我建议只是修复它,不要强迫它,它的不合规无论如何),至少在vs2005中。我还没有进入2010年,因为我进行了大量的嵌入式开发,看起来嵌入式内容的转换编译器通常是一个很大的痛苦。所以,对于2010年我不能说太多,但我知道这是贯彻始终的!
答案 3 :(得分:2)
你会遇到很多问题,因为VC6出了名的不合适,你的代码(特别是如果你使用了模板)可能会充满黑客,让它不再需要工作,因为MS做了很多对于更新的编译器版本的一致性工作,VC10编译器可能会对它们进行限制。
答案 4 :(得分:2)
这一举动,我所知道的两个痛苦问题:
- VC6和更高版本之间的异常处理默认值已更改。我相信/Eh
是默认值,而且已经发生了变化
- 自Win2k以来,VC6运行时(msvcrt DLL)包含在任何Windows操作系统中,而对于任何其他版本,您需要将其与您的软件一起安装在几乎任何操作系统中。
答案 5 :(得分:2)
如果你有商业版的Visual C ++:
在Visual C ++安装目录中查找devenv(应为%VS90COMNTOOLS%\..\IDE\devenv.exe
> devenv /upgrade project.sln
> msbuild.exe project.sln /t:Build /p:Configuration=Release /p:Platform=Win32
检查编译
但是如果您有免费版的Visual C ++:
在Visual C ++安装目录中找到vcbuild.exe
(应为%PROGRAMFILES%\Microsoft Visual Studio 9.0\VC\vcpackages\vcbuild.exe
)
> vcbuild.exe /upgrade project.sln
/msbuild:Configuration=Release
/msbuild:Platform=Win32
对于不需要转换的未来版本,请键入:
> msbuild.exe project.sln /t:Build /p:Configuration=Release /p:Platform=Win32
答案 6 :(得分:2)
从VS2005迁移到VS2010时,我们遇到了第三方库的问题,导致我们的程序在每次加载时崩溃。问题原来是微软在链接器中反转/ NXCOMPAT开关的默认设置。该开关控制是否启用数据执行保护(DEP)。在VS2010之前,该开关的默认设置为NO,我们使用的DLL显然依赖于该设置才能正常工作。
我不确定NXCOMPAT链接器开关的返回距离。它未在VS2005 对话框中可用的任何设置中列出,但是在从命令行运行link /help
时列出了它。我从来没有能够从微软那里找到这样的变化列表,所以这种错误非常难以追踪。
答案 7 :(得分:1)
如果您使用CLR从VC ++ 6迁移到VS2015,则不再找到现有的最小和最大功能,添加
#define NOMINMAX
#include <algorithm>
namespace Gdiplus
{
using std::min;
using std::max;
};
其次,NAN float改为nan