AsyncPro и 64bit

Я запускаю Delphi XE8 и установил GetIt AsyncPro для VCL 1.0. Он отлично работает, когда я компилирую свое приложение для 32 бит, но терпит неудачу для 64 бит. Неудача:

[dcc64 Error] OoMisc.pas(2771): E2065 Unsatisfied forward or external declaration: 'Trim'

когда я открываю OoMisc.pas is see:

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

на Trim функция, похоже, не определена. Блок имеет SysUtils в предложении uses.

4 ответов


держу пари, что это реликвия из Delphi 1, когда Win32 использовался для отличия от Win16. Вы можете безопасно удалить эти строки.


AsyncPro поддерживает только платформу Win32. Его нельзя использовать как есть для бит Win64.

Он содержит много 32-битного встроенного кода ASM, который должен быть заменен либо кодом Pascal, либо портирован на 64-битный код ASM. Помимо этой части могут быть и другие несовместимости с платформой Win64 bit.

преобразование 32-разрядных приложений Delphi в 64-разрядные Windows-Встроенный код сборки

Если ваше приложение содержит встроенный ассемблер (ASM) код, вам нужно изучите код ASM и внесите следующие изменения: операторы сборки с кодом Pascal не поддерживаются в 64-разрядной версии приложения. Заменить операторы сборки кодом Pascal или функции, написанные полностью в сборке.

перенос кода сборки с IA-32 на Intel 64 не может быть выполнен просто копирование кода. Рассмотрим особенности архитектуры, такие как размер указателей и выравнивание. Вы можете также посоветовать с руководство процессора для новых инструкций. Если вы хотите скомпилировать то же самое код для разных архитектур используйте условные определения. См. Раздел Использование Условные определения для кросс-платформенного кода в "Using Inline Assembly Код."

RAD Studio поддерживает Intel x86 через SSE4.2 и AMD 3dNow, и для x64, Intel / AMD через SSE4.2.

Использование Встроенного Кода Сборки


обновление:

там Порт х64 из AsyncPro, предусмотренных Юхан Бонтес:

У меня есть версия для Win64 на моем Github: https://github.com/JBontes/AsyncPro

он компилируется, но я не был в состоянии проверить его comprehensivly. Не стесняйтесь подать вопрос, если вы получите застрял где угодно.


я конвертировал AsyncPro в XE8, но он поддерживает только Win32.


OoMisc.у ПА был Trim функция, которая была удалена из части реализации. Однако кто-то забыл удалить его из интерфейсной части. Это не повредило для x32, потому что он был внутри $IFNDEF. Win32 не определен для x64, поэтому компилятор будет жаловаться. Решением этой конкретной проблемы является удаление следующих 3 строк, предназначенных для Delphi 1.0.

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

конечно, это не делает AsyncPro совместимым с x64, поскольку будет иные вопросы.