支持目前在32位操作系统上运行的64位操作系统

时间:2010-06-30 10:02:25

标签: windows 64-bit operating-system

我有一个包含许多服务和一个UI模块的应用程序。所有这些都是在VC ++ 6.0中开发的。整个KLOC将是560 KLOC。

它使用Mutltithreading,MFC和所有数据类型,如word,int,long。

现在我们需要支持64位操作系统。我们需要对产品做出哪些改变。

支持我的意思是在64位操作系统上运行应用程序,也使用64位内存。

编辑:由于时间限制,我正在排除迁移到VS2005或任何高于VC6.0的东西。

那么需要做些什么改变。

5 个答案:

答案 0 :(得分:5)

64位Windows通过WOW包含32位。任何32位应用程序都应该继续工作。

(只有驱动程序拥有才能匹配操作系统的位数。)

[评论者注意:任何类型的插件 - 不是单独的应用程序,而是需要与主机匹配的其他应用程序使用的dll。在这种情况下,您也会遇到64位扩展与32位主机不兼容的问题。]

答案 1 :(得分:4)

正如理查德所说,32位版本应该继续工作,除非你有驱动程序或shell扩展或其他东西。

但是,如果您确实需要升级代码,那么您也必须升级编译器:我认为MFC在VS2005或更高版本之前不会获得良好的64位支持。我建议你在VS2010中获得32位代码 - 这将是微不足道的 - 然后开始考虑将其转换为64位。您当然可以在VC6中保留生产32位版本,但之后会增加维护人员负担。

通过将编译器翻转到64位并启用完整警告,您可能会获得大部分转换方式 - 特别是考虑到代码的大小,查看它可能是不切实际的。需要注意的一件事是将指针存储在整数,双字等中,这些指针现在可能太短而无法容纳指针 - 您现在需要DWORD_PTR等 - 但我认为这些警告确实可以捕获它。

或者,如果这是在许多组件中,那么您可能只会将一些组件迁移到64位。然后,遗憾的是,您在两个版本之间的通信时遇到了数据长度问题。

答案 2 :(得分:2)

必须转换为更新的编译器。时间限制几乎无关紧要。 VC6编译器根本无法生成64位代码。对于初学者,它生成的每个指针都是32位。如果你需要访问“64位存储器”,即高于0x00000000FFFFFFFF的存储器,则32位是不够的。

答案 3 :(得分:1)

如果您排除将IDE更改为本质上支持64位编译和调试的IDE,则会使您的工作变得更加复杂。你确定它不值得一击吗?

答案 4 :(得分:0)

只是在64位操作系统上运行,您无需进行任何更改。这就是WOW64的用途。

但是,如果您希望本机运行64位(即访问64位内存空间),则必须编译为64位。这意味着使用支持64位的IDE。没有办法解决这个问题。

如果使用合适的编码标准(主要是没有关于指针大小的假设,如int-pointer转换),大多数程序应该没有问题转换为64位。你会收到很多关于std :: size_t转换等事情的警告,但它们会毫无意义。