在将大型 C++ 程序从 VS2005 转换为 VS2008 之前我应该知道啥?
Posted
技术标签:
【中文标题】在将大型 C++ 程序从 VS2005 转换为 VS2008 之前我应该知道啥?【英文标题】:Anything I should know before converting a large C++ program from VS2005 to VS2008?在将大型 C++ 程序从 VS2005 转换为 VS2008 之前我应该知道什么? 【发布时间】:2008-10-28 13:49:29 【问题描述】:在将大型 C++ 程序从 VS2005 转换为 VS2008 之前,我应该知道什么?
【问题讨论】:
将 VC++ 重新标记为 VisualC++,试图让 SO 标准化一个标记...VS2005
包括 Windows SDK 5.0,VS2008
包括 Windows SDK 6.0。详细对比见"Differences between Windows SDK 5.0 and 6.0 versions"。
【参考方案1】:
我现在正在解决这个问题。
运行 WinMerge 以查看我所做的更改...
好的,这是我必须在一个巨大的 Win32/MFC 客户端应用程序中解决的问题:
一些 MFC 功能已成为虚拟功能(如果我没记错的话,这在过去是没有的 - CWnd::GetMenu 就是其中之一)。还有一些与我们的旧鼠标滚轮支持相关的东西(在 Windows 内置鼠标滚轮支持之前)不知何故坏了(我刚刚删除了这个功能,所以我从来没有真正弄清楚为什么会坏)。
一些 ATL 方法(或方法参数)已更改为 const,而最初不是(搞砸了我的覆盖)。
Platform SDK 较新 - 如果您正确设置 Windows SDK 版本#defines,请小心(我们并非在所有地方 - 这很愚蠢)。您现在可能正在使用更新版本 (Vista/2008) 的 Win32 结构进行构建。这在我的 XP 机器上效果不佳。
STDMETHOD 现在包括 100% 正确的 __declspec(nothrow) - 除了这在我们的代码中发现了一些问题。某些编写得好像会通过 COM 公开但从未公开过的接口会引发异常。
IDE 有一个 bug 如果您没有设置断点来突出显示整行(我认为是VC++ 的默认值,也许吧?)。
这些问题大多是由于我们的代码中的细微错误或 MFC/ATL 库的过度重载造成的。既然其他人的代码都很完美,你应该没问题;)
【讨论】:
【参考方案2】:在我的工作中,我们将一个大型 C++ 项目从 VS2005 转换为 VS2008。根本没有问题。不用说,您绝对应该保留旧项目的副本以防万一。 :)
编辑:我应该提到该项目是独立于平台的,并且没有 gui 组件。
【讨论】:
【参考方案3】:如果您必须支持旧平台,请注意:VC2008 是can't target Win9x or NT4 的第一个版本。正是出于这个原因,我的公司必须坚持使用 VC2005。
【讨论】:
【参考方案4】:如果您的项目正在使用 MFC,那么您应该知道它在 2008 年进行了相当大的更新,这可能会破坏一些东西。主要是安全性和 UI 更新,我认为无论如何都值得这样做。
请参阅here,了解有关 VS 2008 中更改内容的更多一般信息。
【讨论】:
【参考方案5】:我最近将一个使用 VC++5 编写的项目转换为 VS2008,这是我 10 年来没有接触过的。我刚刚加载了项目并让VS2008转换它。一切都很顺利。 (项目现在在这里:http://www.codeplex.com/Uptime)
【讨论】:
【参考方案6】:根据我们的经验,项目转换得很好。我们遇到的唯一代码更改是删除了 _MIN 和 _MAX - 我们必须将其更改为 std::min() 等。我们的 MFC 内容编译正常。我们最头疼的是获得我们购买的第三方库的 VS 2008 版本,以及构建大型开源包(如 boost、OpenSceneGraph 和 GDAL)的 VS 2008 版本。不是火箭科学——只是有点乏味。我写了一个简短的概要on my blog。
【讨论】:
【参考方案7】:您不能简单地重新编译的语法有什么不同吗? VS 会自动为你转换 .sln 和 vcproj 文件。剩下的只是代码,除非你在做一些很奇怪的事情,否则它应该按原样重新编译。
【讨论】:
我的回答是不是很糟糕......怎么样?它与其他答案的一半基本相同。以上是关于在将大型 C++ 程序从 VS2005 转换为 VS2008 之前我应该知道啥?的主要内容,如果未能解决你的问题,请参考以下文章
将 C# 项目从 VS 2005 移动到 VS 2013 后出现编译器错误
将 C++ 从 VS2003 迁移到 VS2005 需要哪些代码更改?
如何将VS2003的XslTransform转换为VS2005的XslCompiledTransform?
2010年无法将VS2005中的vcproj转换为vcxproj