代码之家  ›  专栏  ›  技术社区  ›  Ganesh R.

我们能创建一个在32位和64位窗口上都能正常工作的VC++可执行文件吗?

  •  7
  • Ganesh R.  · 技术社区  · 14 年前

    是否有任何方法来构建一个VC++项目,以便它创建的dll/exe在32位Windows操作系统上作为32位应用程序工作,在64位Windows操作系统上作为64位应用程序工作(不在WOW64中)。

    我知道这对于使用/anycpu选项的C应用程序是可能的。

    2 回复  |  直到 14 年前
        1
  •  10
  •   Chris Schmich    14 年前

    clr对/anycpu选项有特殊的加载程序支持。

    如果你 真正地 要为本机执行此操作,最好的方法是:

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

    这就是如何 Sysinternals 工具可以工作(将ProcessExplorer下载到64位计算机上并运行它:您将看到它将procexp64.exe写入磁盘,然后从磁盘运行它)。这是一个黑客,但它起作用。

        2
  •  5
  •   Rup    14 年前

    不是阿法克-问题是

    1. 您将需要单独的代码;这对C有效,因为您正在生成.NET IL,该IL在目标系统上转换为本机代码。
    2. WindowsPE格式只有一个图像头,以后无法链接到另一个头,从而将两组代码放在同一个库中。

    对一个.exe所能做的最好的事情就是发送一个32位的.exe来检查它是否在运行wow64,然后生成64位版本。不过,对于库来说,我想不出一个等效的技巧——它首先必须匹配要加载的主机进程的位。