真的值得从 VC6 -> vc2005,2008 移植吗?

Posted

技术标签:

【中文标题】真的值得从 VC6 -> vc2005,2008 移植吗?【英文标题】:Is it really worth porting from VC6 ->vc2005,2008? 【发布时间】:2008-11-18 06:47:41 【问题描述】:

你预见到的所有问题是什么。

【问题讨论】:

【参考方案1】:
    Microsoft 不再支持 VC 6,无论如何。如果出现问题并且无论出于何种原因我们无法编译,我们将完全靠自己无法从 Microsoft 获得任何帮助。以这种方式出现问题似乎不太可能,但如果相关代码是主要收入来源,那么您就可以保持平衡。 在 VC6 中无法编译 64 位代码。 32 位程序在 64 位 Windows 上运行——至少现在是这样。但是,如果您需要利用创建原生 64 位产品所带来的潜在速度和内存增益(例如,能够在单个进程中使用超过 3 GB 的 RAM),那么 VC6 就出局了。 VC9 具有更好的标准合规性。 VC6 的标准合规性非常差。这实际上既是移植的原因,也可能是不移植的原因。使用 VC6 的程序员习惯于以“错误的方式”做事,并且需要重构大部分代码才能在 VC9 中工作。

上面 #3 的一个简单示例是 for 循环:

for( int n = 0; n < someMax; ++n )

  // do stuff


printf("Did %d stuffs", n);

此代码在 VC6 中有效,但在 VC9 中无效。它实际上是一个格式错误的程序——VC6 允许它是 VC6 中的一个缺陷。

从 VC6 移植到 VC9 的决定不是灌篮。您必须考虑项目的难度,并与您获得的任何收益和避免的任何问题进行平衡。

在决定是否以及如何开展此项目时,您应该查看 Microsoft 的重大更改列表。第一个列表,从 VC6 到 VC7 的重大更改,是一个巨大的列表。相比之下,其他的要小得多。这表明如果你从 VC6 移植到任何东西,它应该至少是 2005 年。

Breaking Changes VC 2005 - 2008 (VC 2005 -> VC 2008) Breaking Changes in the Visual C++ 2005 Compiler (VC 2003 -> VC 2005) Breaking Changes in Visual C++ .NET 2003 (VC6 -> VC 2003)

【讨论】:

【参考方案2】:

你说的代码库有多大?

移植一个小程序(主要是非模板化的 C++ 代码)应该是相当简单的。

然而,我曾经不得不将 100.000 行使用模板的代码从 VC6 转换为 VC2005,这是一个噩梦般的一周(工作 5 天),主要问题是我必须手动修复大约 30%问题(70% 是相当微不足道的,可以通过搜索和替换来解决它们)。但更多的问题是旧代码没有测试用例和测试框架,所以即使我让应用程序编译并且没有段错误,看起来还不错(?),我不能保证它实际上工作的一切正如它应该的那样。

所以实际上我的建议是考虑代码的大小和测试的可用性,并考虑代码是否真的需要移植(在我的情况下是“是”,但并非总是如此,尤其是如果软件很快就会淡出)

【讨论】:

模板编程不多,但使用过标准容器 标准容器应该没问题,VC6 的 stl 实现基本上是 VC2005 的一个损坏的子集,所以大部分时间没问题,但可能有一些特殊的“修复”,来自开发人员,以对付旧的 stl 容器的错误。当心那些!

以上是关于真的值得从 VC6 -> vc2005,2008 移植吗?的主要内容,如果未能解决你的问题,请参考以下文章

VC6.0中怎样使用CImage类?

VC6编译错误

我是如何把VC6一直用到2016年的

VS2008 exe-VC6 dll互操作性

Visual Studio 中的vc++ 2005创建一个C++的项目,求有多线程的例子!!!

VC6:列出编译器错误