【问题标题】:AsyncPro and 64bitAsyncPro 和 64 位
【发布时间】:2015-07-10 20:10:41
【问题描述】:

我正在运行 Delphi XE8 并安装了 GetIt AsyncPro for VCL 1.0。当我为 32 位编译我的应用程序但在 64 位时失败时,它工作正常。 失败是:

[dcc64 Error] OoMisc.pas(2771): E2065 Unsatisfied forward or external declaration: 'Trim'

当我打开 OoMisc.pas 时看到:

{$IFNDEF Win32}
function Trim(const S : string) : string;
{$ENDIF}

Trim 函数似乎没有定义。该单元的uses 子句中确实有SysUtils

【问题讨论】:

    标签: delphi win64


    【解决方案1】:

    AsyncPro 仅支持 Win32 平台。它不能按原样用于 Win64 位。

    它包含大量 32 位内联 ASM 代码,这些代码必须被 Pascal 代码替换或移植到 64 位 ASM 代码。除了这部分之外,可能还有其他与 Win64 位平台不兼容的地方。

    Converting 32-bit Delphi Applications to 64-bit Windows - Inline Assembly Code

    如果您的应用程序包含内联汇编 (ASM) 代码,您需要 检查 ASM 代码并进行以下更改: 64 位不支持使用 Pascal 代码的汇编语句 应用程序。用 Pascal 代码或替换汇编语句 完全用汇编编写的函数。

    将汇编代码从 IA-32 移植到 Intel 64 不能简单地完成 复制代码。考虑架构细节,例如 指针的大小和对齐方式。您可能还想咨询 处理器手册以获取新指令。如果你想编译相同 不同架构的代码,使用条件定义。请参阅使用 “使用内联汇编”中跨平台代码的条件定义 代码。”

    RAD Studio 通过 SSE4.2 和 AMD 3dNow 支持 Intel x86,并用于 x64、英特尔/AMD 到 SSE4.2。

    Using Inline Assembly Code


    更新:

    有 Johan Bontes 提供的 AsyncPro 的 Win64 端口:

    我的 Github 上有一个 Win64 版本: https://github.com/JBontes/AsyncPro

    它编译,但我没有 能够全面地测试它。如果您得到,请随时提出问题 卡在任何地方。

    【讨论】:

    • 感谢 64 位版本的领导。我试试看
    【解决方案2】:

    我打赌那是 Delphi 1 的遗物,当时 Win32 被用来与 Win16 区分开来。您可以安全地删除这些行。

    【讨论】:

    • 我尝试删除函数定义,但随后又出现了一堆似乎不相关的错误。它一定是别的东西。有人能用 64 位应用程序编译 ASPRO 吗?
    【解决方案3】:

    我将 AsyncPro 转换为 XE8,但它只支持 Win32。

    【讨论】:

      【解决方案4】:

      OoMisc.pas 有一个Trim 函数,该函数已从实现部分中删除。但是有人忘记将其从界面部分中删除。这对 x32 来说并没有什么坏处,因为它在 $IFNDEF 内部。 Win32 没有为 x64 定义,所以编译器会报错。此特定问题的解决方案是删除以下 3 行原本用于 Delphi 1.0 的行。

      {$IFNDEF Win32}
      function Trim(const S : string) : string;
      {$ENDIF}
      

      当然,这不会使 AsyncPro 与 x64 兼容,因为还会有其他问题。

      【讨论】:

        猜你喜欢
        • 2019-07-09
        • 2013-03-24
        • 1970-01-01
        • 2013-01-11
        • 2011-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多