12

我有一个客户仍在使用 Visual Studio 6 来构建生产系统。他们编写使用 STL 并在多处理器机器上运行的多线程系统。

有时,当他们更改其中一台服务器机器的规格或增加其负载时,他们会变得“奇怪”,难以重现错误......

我知道 Visual Studio 6 开发存在几个问题,我想说服他们迁移到 Visual Stuio 2005 或 2008(他们拥有 Visual Studio 2005 并将其用于某些项目)。

此问题的目的是汇总已知问题或升级原因的列表,以及讨论或报告这些问题的链接。拥有这些问题如何折磨你的真实“恐怖故事”也会很有用。

4

14 回答 14

18

在 64 位系统上不受支持,与 Vista 存在兼容性问题,并且它已于 2008 年 4 月 8 日被 Microsoft 移出扩展支持

http://msdn.microsoft.com/en-us/vbrun/ms788708.aspx

于 2008-10-10T13:28:16.450 回答
11

未修补的 VC6 STL 不是线程安全的。看这里http://www.amanjit-gill.de/articles/vc6_stl.html,补丁不包含在服务包中,您必须直接从 Dinkumware 获取它们(从这里http://www.dinkumware.com/vc_fixes.html),然后将它们应用于每个安装...

于 2008-10-10T13:32:32.837 回答
10

我们在工作场所看到的最大问题是它无法处理即使是稍微复杂的模板类或函数。仅这一事实就迫使公司中一些最忠实的 VS6 粉丝升级并开始使用 VS2005。除了模板问题之外,intellisense 好很多,调试更容易也更准确,很多人发现 IDE 更容易导航。到目前为止,我们看到的唯一缺点是 2005 年的构建时间比 6 年的要长一些(但这可能是编译器更健壮的副作用)

您还可以查看这些站点以获取 VS6 中已知问题的示例:

我敢肯定,如果您仔细研究一下,您会发现更多。

于 2008-10-10T13:35:28.057 回答
7

VS6 不根据当前的 C/C++ 标准编译代码。例如,

  • 它有不正确(过时的)循环范围规则。现在,至少有一个 MSFT SDK 已经更新了代码,该代码需要正确的语义,因此 SDK 甚至不再使用 VS6 进行编译。
  • 除了最简单的模板结构之外,它无法编译所有的模板结构。
  • 它将编译一些在最近的标准更新中被宣布为非法的模板结构(因为这些结构实际上并没有像普通用户所期望的那样)。
于 2008-10-10T16:16:31.867 回答
3

operator new 不符合 C++ 规范,并且不会在分配失败时抛出异常,解决这个问题并非易事。

请参阅:http: //msdn.microsoft.com/en-us/magazine/cc164087.aspx

于 2008-10-10T13:29:39.067 回答
1

我升级的最大原因之一是符合标准的 C++ 编译器(尽管仍然不是 100%),所以我可以在我的项目中利用更多的 C++ 功能,而不必担心可能导致难以找到错误的奇怪的黑客和变通方法。

于 2008-10-10T13:31:08.860 回答
1

与 Vista 不兼容。哎呀,VS 2005 与Vista 存在一长串问题。

话虽如此,VS 中的大多数改进似乎都适用于 C++ 本机代码以外的所有内容。我看到的是更多的标准合规性,这很重要,但几乎没有戏剧性。

于 2008-10-10T13:32:20.700 回答
1

Visual Studio 6 与最新的 Windows SDK 不兼容,因此它不能(至少很容易地)利用最新的操作系统功能。

于 2008-10-10T13:34:37.247 回答
1

虽然我不再有具体的细节,但我只是在工作中升级时,新的编译器发现了很多 VC 6 悄悄溜走的错误。仅通过升级提高了产品的稳健性。

于 2010-09-17T21:35:23.367 回答
0

如果他们使用 STL,他们可能会对最近发布的功能包感兴趣,其中包括TR1的实现。

于 2008-10-10T13:34:18.293 回答
0

我已经升级了我的东西,但它相对简单。升级的一个缺点是VS 2005 DLL Hell

于 2008-10-10T13:34:31.600 回答
0

STL 的 VS 2008 版本使用 编译/clr,因此如果他们有兴趣过渡到托管世界,他们不必丢失所有旧代码。

于 2008-10-10T13:35:29.587 回答
0

默认情况下,较新的版本具有更好的编译器和更好的库。但是将现有项目移植到较新的工作室并不总是那么容易,您可以手动升级编译器和库。

一年前我还在使用 VS 6.0 和 Intel 编译器。那时我们只有一堆旧代码,它们威胁迭代器作为指针,反之亦然,这一切都非常混乱和可怕,所以这让我们无法升级。

但毕竟我不得不升级,因为我目前使用的框架根本无法在 VS 6.0 上运行。认为这是最终的原因:-)

于 2008-10-10T13:50:08.947 回答
0

第三方库也只支持有限数量的编译器。因此,您的客户可能无法接受错误修复或功能升级。

例如,即使是作为 Boost 广泛使用的库也仅支持 VS 7.1 及更高版本(来源

您可能还会遇到一些数据执行保护 (DEP) 问题,因为 VC6 附带了旧的 ATL 版本。像往常一样,请参阅Raymond Chen了解详情。

于 2008-10-10T14:09:22.700 回答