AsyncPro和64位

9

我正在运行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函数似乎没有被定义。该单元在其使用子句中确实包含SysUtils

4个回答

6
AsyncPro仅支持Win32平台。它不能直接用于Win64位。其中包含大量的32位内联ASM代码,需要将其替换为Pascal代码或者将其移植成64位ASM代码。除了该部分外,在Win64位平台上可能存在其他不兼容性。 将32位Delphi应用程序转换为64位Windows-内联汇编代码 如果您的应用程序包含内联汇编(ASM)代码,则需要检查ASM代码并进行以下更改:在64位应用程序中不支持将汇编语句与Pascal代码混合。请使用完全以汇编语言编写的Pascal代码或函数替换汇编语句。
将汇编代码从IA-32移植到Intel 64不能简单地复制代码。考虑架构特定的因素,例如指针大小和对齐方式。您可能还想查阅处理器手册以获取新指令。如果要为不同的架构编译相同的代码,请使用条件定义。请参见“使用内联汇编代码”中的“使用条件定义来编写跨平台代码”。
RAD Studio支持通过SSE4.2的Intel x86和AMD 3dNow,以及x64的Intel / AMD。 使用内联汇编代码

更新:

有一个由Johan Bontes提供的AsyncPro Win64端口:

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

它可以编译,但我还没有全面测试过。如果您遇到任何问题,请随时提交问题。


感谢提供64位版本的线索。我会尝试一下。 - Seti Net

2

我敢打赌这是来自Delphi 1时期的遗物,当时使用Win32来区分Win16。您可以安全地删除这些行。


我尝试删除函数定义,但是接着出现了一堆似乎与此无关的错误。肯定是其他问题。 有人能够使用64位应用程序编译ASPRO吗? - Seti Net

2

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


0
OoMisc.pas 中有一个 Trim 函数,已从实现部分中删除。但是有人忘记从接口部分中删除它。这对于 x32 没有问题,因为它在 $IFNDEF 内部。 x64 未定义 Win32,因此编译器会报错。解决此特定问题的方法是删除以下三行代码,这些代码是为 Delphi 1.0 设计的。
{$IFNDEF Win32}
function Trim(const S : string) : string;
{$ENDIF}

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接