我们可以创建一个VC++可执行文件,它可以在32位和64位Windows上本机工作吗?

Gan*_* R. 7 c++ compatibility visual-studio-2010 32bit-64bit visual-c++

有没有办法构建VC++项目,以便它创建的dll/exe将作为32位Windows操作系统上的32位应用程序和64位Windows操作系统(不是WOW64)上的64位应用程序.

我知道使用/ ANYCPU选项的C#应用​​程序是可能的.

Chr*_*ich 10

CLR为/ ANYCPU选项提供特殊的加载程序支持.

如果你真的想为本地人这样做,最好的办法是:

  1. 为32位和64位构建二进制文件
  2. 作为构建32位二进制文​​件的一部分,请将64位二进制文​​件包含为资源
  3. 在32位计算机上,只需运行32位二进制文​​件
  4. 在64位计算机上,当32位二进制文​​件运行时,解压缩64位二进制资源,将其写入磁盘,然后从那里运行它

这就是Sysinternals工具的工作方式(将Process Explorer下载到64位计算机上并运行它:您将看到它将procexp64.exe写入磁盘,然后从那里运行它).这是一个黑客,但它的工作原理.


Rup*_*Rup 5

不是AFAIK - 问题是

  1. 你需要单独的代码; 这适用于C#,因为您生成的.NET IL将转换为目标系统上的本机代码
  2. Windows PE格式只有一个图像标题,以后无法链接到另一个标题,以将两组代码放在同一个库中.

你可以为.EXE做的最好的事情是运送一个32位的.exe来检查它是否正在运行WOW64然后产生64位版本.我不能想到库的等效技巧 - 它必须首先匹配主机进程的位才能加载.