我正在运行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
。
答案 0 :(得分:6)
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,Intel / AMD通过SSE4.2。
更新:
Johan Bontes提供了AsyncPro的Win64端口:
我的Github上有一个Win64版本: https://github.com/JBontes/AsyncPro
它编译,但我没有 能够理解地测试它。如果你得到,请随时提出问题 卡在任何地方。
答案 1 :(得分:2)
我敢打赌,当使用Win32
来区分Win16
时,这是Delphi 1的遗物。您可以安全地删除这些行。
答案 2 :(得分:2)
我将AsyncPro转换为XE8,但它只支持Win32。
答案 3 :(得分:0)
OoMisc.pas有一个Trim
函数,已从实现部分中删除。但有人忘了将它从界面部分中删除。这对x32没有影响,因为它在$ IFNDEF内部。
{x}未定义Win32
,因此编译器会抱怨。针对此特定问题的解决方案是删除以下针对Delphi 1.0的3行。
{$IFNDEF Win32}
function Trim(const S : string) : string;
{$ENDIF}
当然,这并不会使AsyncPro与x64兼容,因为会有其他问题。