日期:2014-05-17  浏览次数:20822 次

32位转64位的问题
最近遇到一个程序,是以前师兄写的,在32位电脑上写的,在64位电脑上运行不了。现在老板让我把它升级到在64位电脑上可以运行,但是总出错,请教大家该如何解决。这个程序引用了很多第三方的dll文件,都是32位的。
在目标平台any CPU的情况下,经过一些小修改,整体程序可以运行通,但是运行某些模块的时候,提示错误:未处理COMException,没有注册类。百度了以后说把目标平台改成×64,试了以后整体代码都运行不起来了,报了很多其他的错误。比如在往注册表中写注册码的时候,key总是为空值(代码应该没有问题,因为在32位下都可以运行通),所以无法运行下去。
请教下大家这个问题该如何解决比较好,同时,一般来讲在32位软件升级到64位的时候该注意哪些问题或者该有哪些思路呢,还请赐教。

------解决方案--------------------
好像纯.net的程序应该不存在这样的问题,关键是第三方的dll文件如何能保存在64位上运行
相关的帖子参考:跳转
------解决方案--------------------
这个估计比较麻烦,加载的第三方DLL也必须同时支持x86和x64的OS,找找看是否有替换的DLL
------解决方案--------------------
如果使用的第三方dll不支持x64或者没有anycpu的版本,那么你只能将你的项目所有dll和主程序exe文件都设置为x86模式编译,那样程序就可以运行在64位系统中了。所谓的“在64位电脑上运行不了”并不是要求你一定要将程序编译为anycpu或者X64版本,64位系统是可以运行32位程序的,但是前提是你的程序所有引用必须使用的统一的Platform Target,如果你的程序或者部分使用了Any CPU的目标平台,却引用了32位dll,那么在64位系统下面,这Any CPU部分会按照64位运行,而32位dll却只能按照32位运行,所以程序就无法正常运行了。只要将所有Any CPU的dll以及exe都统一为x86就一定OK。另外注意一点,项目本身的x86设置不代表解决方案的x86设置,最好两处都改。
------解决方案--------------------
C# 有 AnyCPU 模式,而 C++不管是本地的还是托管的,都必须指定 CPU 的。
把所有使用 AnyCPU 的地方指定为何 C++ 一直的处理器类型。

在程序中,如果有需要特殊处理 Wow 的时候,单独处理。
比如说,远程注入等等。
------解决方案--------------------
最好所有的引用针对的AnyCpu保持一致,x86通用些,  引用复杂了,或者存在第三方的引用就更不好处理了