是否有任何指导如何尽可能少地转移到x64?
假设我有一个用C ++编写的windows native x86可执行文件。 EXE本身工作正常,但也有由前两个EXE和外部x64进程托管的DLL。使用这样的设置,我需要重写哪些部分?
我希望得到一个更一般的答案,或者可能是参考文献的链接,其中给出了一些理论背景。感谢
答案 0 :(得分:5)
一般来说,我推荐的方法是对它进行单元测试。构建测试,以便它们全部传递32位实现,然后开始构建和测试64位。值得特别注意您执行以下任何操作的代码的任何部分:
size_t
类型的数据,现在大小不同。请仔细阅读此代码,将size_t
和long
等内容更改为显式32或64位typedefs)除了测试尽可能多的代码路径之外,确实没有快捷方式。这项工作的简单程度取决于编写代码的可移植性。你可能很幸运......
答案 1 :(得分:3)
此SDK article列出了64位Windows的注意事项。 MSVC ++特定注意事项为listed here。通常,只编译代码将清除大多数问题。我不能评论你的具体情况,它不够详细。
答案 2 :(得分:2)
我发现清除错误的最佳方法是审核代码,查找执行以下任何操作的代码并在32位世界中修复它,然后启动端口。
对于您确实需要执行DWORD / ptr操作的情况,请将类型更改为DWORD_PTR。
我见过很多使用CStringToPtr的代码而不是CMap<>适当的类型。
所有这些东西都可能在64位上编译(由于演员阵容而没有警告),然后在他们的脸上黯然失色。如果他们使用了正确的类型并且没有强制转换,则代码将首次运行。
同时检查是否有任何设置WndProc的子类代码 - 你需要一个不同的标志来在64位Windows上设置它。
如果使用MFC,您也会(无益地)发现容器大小现在返回64位大小而不是32位大小计数,这意味着您的32位/ 64位存档将被破坏。你必须在你去的时候解决这个问题。我们使用一些聪明的技巧创建了我们自己的自定义MFC实现,以允许我们在64位盒上反序列化32位存档,反之亦然。