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. Не стесняйтесь подать вопрос, если вы получите застрял где угодно.
OoMisc.у ПА был Trim
функция, которая была удалена из части реализации. Однако кто-то забыл удалить его из интерфейсной части. Это не повредило для x32, потому что он был внутри $IFNDEF.
Win32
не определен для x64, поэтому компилятор будет жаловаться. Решением этой конкретной проблемы является удаление следующих 3 строк, предназначенных для Delphi 1.0.
{$IFNDEF Win32}
function Trim(const S : string) : string;
{$ENDIF}
конечно, это не делает AsyncPro совместимым с x64, поскольку будет иные вопросы.