2015-07-10 33 views
9

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

[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

回答

2

我敢打赌,这是从德尔福1的文物,当Win32被用来区分Win16。您可以安全地删除这些行。

+0

我试图删除函数定义,但后来我得到了一堆似乎没有关联的错误。它一定是别的东西。 有没有人能够用64位应用程序编译ASPRO? –

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代码或 函数。

将汇编代码从IA-32移植到Intel 64不能简单地通过 复制代码来完成。考虑体系结构的细节,比如指针大小和对齐方式。您也可以参考 处理器手册获取新的说明。如果您想为不同的体系结构编译相同的 代码,请使用条件定义。请参阅“使用内联汇编 代码”中的使用 有条件定义跨平台代码。

RAD Studio通过SSE4.2和AMD 3dNow支持Intel x86,而通过SSE4.2支持Intel支持 x64。

Using Inline Assembly Code


更新:

有由Johan Bontes提供AsyncPro的Win64平台端口:

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

它编译,但我不是 能够综合测试它。随时提出问题,如果你得到 卡住任何地方。

+0

感谢您在64位版本上的领先地位。我会试一试 –

2

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

0

OoMisc.pas有Trim功能,即从实现部分去除。但有人忘记从接口部分删除它。这对x32没有影响,因为它在$ IFNDEF中。 Win32没有为x64定义,所以编译器会抱怨。对于这个特定问题的解决方案是删除以下3行适用于Delphi 1.0的行。

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

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