AsyncPro 和 64 位

AsyncPro and 64bit

我是 运行 Delphi XE8,安装了 VCL 1.0 的 GetIt AsyncPro。当我为 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函数好像没有定义。该单位在其使用条款中确实有 SysUtils

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

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

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

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

If your application contains inline assembly (ASM) code, you need to examine the ASM code and make the following changes: Mixing of assembly statements with Pascal code is not supported in 64-bit applications. Replace assembly statements with either Pascal code or functions written completely in assembly.

Porting assembly code from IA-32 to Intel 64 cannot be done by simply copying the code. Consider the architecture specifics, such as the size of pointers and aligning. You may also want to consult the processor manual for new instructions. If you want to compile the same code for different architectures, use conditional defines. See Using Conditional Defines for Cross-Platform Code in "Using Inline Assembly Code."

RAD Studio supports Intel x86 through SSE4.2 and AMD 3dNow, and for x64, Intel/AMD through SSE4.2.

Using Inline Assembly Code


更新:

Johan Bontes 提供了 AsyncPro 的 Win64 端口:

I have a version for Win64 on my Github: https://github.com/JBontes/AsyncPro

It compiles, but I have not been able to test it comprehensivly. Feel free to file an issue if you get stuck anywhere.

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

OoMisc.pas 有一个 Trim 函数,已从实现部分删除。但是有人忘记将其从接口部分中删除。这对 x32 没有影响,因为它在 $IFNDEF 中。 Win32 没有为 x64 定义,所以编译器会报错。此特定问题的解决方案是删除用于 Delphi 1.0 的以下 3 行。

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

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