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

时间:2010-08-28 13:22:35

标签: c++ visual-c++ visual-studio-2010 compatibility 32bit-64bit

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

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

2 个答案:

答案 0 :(得分:10)

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

如果真的想要为本地人做这件事,最好的办法是:

  1. 为32位和64位构建二进制文件
  2. 作为构建32位二进制文​​件的一部分,请将64位二进制文​​件包含为资源
  3. 在32位计算机上,只运行32位二进制文​​件
  4. 在64位计算机上,当32位二进制文​​件运行时,解压缩64位二进制资源,将其写入磁盘,然后从那里运行
  5. 这就是Sysinternals工具的工作方式(将Process Explorer下载到64位计算机上并运行它:您将看到它将procexp64.exe写入磁盘,然后从那里运行它)。这是一个黑客,但它的确有效。

答案 1 :(得分:5)

不是AFAIK - 问题在于

  1. 你需要单独的代码;这适用于C#,因为您生成的.NET IL将转换为目标系统上的本机代码
  2. windows PE格式只有一个图像标题,以后无法链接到另一个标题,以便将两组代码放在同一个库中。
  3. 你能为.EXE做的最好的事情就是运送一个32位的.exe来检查它是否正在运行WOW64然后产生64位版本。我不能想到库的等效技巧 - 它必须首先匹配主机进程的位才能加载。