【问题标题】:Can we create a VC++ executable which will work natively on both 32 bit and 64 bit Windows?我们可以创建一个 VC++ 可执行文件,它可以在 32 位和 64 位 Windows 上本地运行吗?
【发布时间】:2011-04-05 04:31:36
【问题描述】:

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

我知道 C# 应用程序可以使用 /ANYCPU 选项。

【问题讨论】:

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


    【解决方案1】:

    CLR 对 /ANYCPU 选项有特殊的加载器支持。

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

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

    这就是Sysinternals 工具的工作方式(将 Process Explorer 下载到 64 位机器上并运行它:您会看到它将 procexp64.exe 写入磁盘,然后从那里运行)。这是一个 hack,但它有效。

    【讨论】:

      【解决方案2】:

      不是 AFAIK - 问题在于

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

      您可以为 .EXE 做的最好的事情是发布一个 32 位 .exe,检查它是否在运行 WOW64,然后生成 64 位版本。不过,我想不出库的等效技巧 - 它必须首先匹配主机进程的位才能加载。

      【讨论】:

        猜你喜欢
        • 2012-06-17
        • 1970-01-01
        • 2011-06-23
        • 2011-02-18
        • 2011-11-01
        • 1970-01-01
        • 2014-08-06
        • 1970-01-01
        • 2010-09-08
        相关资源
        最近更新 更多