AsyncPro和64bit

时间:2015-07-10 20:10:41

标签: delphi win64

我正在运行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 个答案:

答案 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。

Using Inline Assembly Code

更新:

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兼容,因为会有其他问题。