代码之家  ›  专栏  ›  技术社区  ›  Len Holgate

从Visual Studio 6升级有哪些令人信服的论据?

  •  12
  • Len Holgate  · 技术社区  · 17 年前

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

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

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

    此问题的目的是将已知问题或升级原因的列表以及讨论或报告这些问题的链接放在一起。了解这些问题如何折磨你的真实生活“恐怖故事”也会很有用。

    14 回复  |  直到 17 年前
        1
  •  18
  •   Shawn Miller    17 年前

    64位系统不支持,与Vista的兼容性问题,微软于2008年4月8日将其移出扩展支持

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

        2
  •  11
  •   David L. Tom    13 年前

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

        3
  •  10
  •   David L. Tom    13 年前

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

    您还可以查看这些网站,了解VS6中已知问题的示例:

    我相信如果你四处看看,你会找到更多的。

        4
  •  7
  •   Mr Fooz    17 年前

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

    • 它对循环的作用域规则不正确(过时)。现在至少有一个MSFT SDK已经更新了需要正确语义的代码,因此该SDK甚至无法再与VS6编译。
    • 它很难编译除最琐碎的模板构造之外的所有模板构造。
    • 它将编译一些在最近的标准更新中被宣布为非法的模板构造(因为这些构造实际上并没有达到普通用户的期望)。
        5
  •  3
  •   Len Holgate    17 年前

    运算符new不符合C++规范,也不会在分配失败时抛出异常,修复这一点绝非易事。

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

        6
  •  1
  •   Scott Dillman    17 年前

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

        7
  •  1
  •   David Thornley    17 年前

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

    话虽如此,VS的大部分改进似乎适用于除C++本机代码之外的所有内容。我看到的是更多的标准合规性,这很重要,但并不引人注目。

        8
  •  1
  •   crashmstr    17 年前

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

        9
  •  1
  •   DougN    15 年前

    虽然我不再有具体的细节,但当我们在工作中升级时,我会把它加进去,新的编译器发现了VC 6悄悄漏掉的不少错误。仅通过升级就提高了产品的稳健性。

        10
  •  0
  •   Ben Straub    17 年前

    如果他们使用STL,他们可能会对最近发布的STL感兴趣 feature pack ,其中包括以下实现 TR1 .

        11
  •  0
  •   Jim Jim    17 年前

    我已经升级了我的东西,但相对来说并不复杂。升级的陷阱是 VS 2005 DLL Hell

        12
  •  0
  •   Ben Straub    17 年前

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

        13
  •  0
  •   akalenuk    17 年前

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

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

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

        14
  •  0
  •   Community Mohan Dere    11 年前

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

    例如,即使是一个广泛使用的库,如Boost,也只支持VS 7.1及更高版本( source )

    而且,您可能在数据执行保护(DEP)方面也遇到了一些问题,因为VC6附带了旧的ATL版本。如往常,请参见 Raymond Chen 了解详情。