ZEOSLib и 64бит

Модератор: Модераторы

Ответить
sts
энтузиаст
Сообщения: 548
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

ZEOSLib и 64бит

Сообщение sts »

есть
fpc 2.2.0 [2008/03/28] for x86_64
lazarus 0.9.25 beta gtk2 [2008/03/28] for x86_64
ZEOSDBO-6.6.2-rc

ниасилил :) компиляцию под эти самые 64 бит
вот ряд ошибок

было Result := LongInt(Self);
стало Result := LongInt(@Self); - компилится

было

function ReturnAddr: Pointer;
asm
MOV EAX,[EBP+4]
end;

на форме zeos посоветовали поменять на (для винды)

function ReturnAddr: Pointer;
asm
{$IFDEF WIN64}
MOVQ 32(%RBP),%RAX
{$ELSE}
MOV EAX,[EBP+4]
{$ENDIF}
end;

все излазил (wiki) - какой define будет для x86_64?

было
Result[I] := Integer(Fields[I]);
где
Result = TIntegerDynArray
Fields = TFields

с этим как бороться?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Для 64 бит нельзя приводить Pointer к Integer - даже если и скомпилится, работать не будет. Специально введены типы PtrInt и PtrUInt - целочисленные типы размером с указатель, работают как на 32 бит, так и на 64.

Ассемблер в ReturnAddr, если правильно понимаю, целиком заменяется на кроссплатформенное
result := get_caller_addr(get_frame);
sts
энтузиаст
Сообщения: 548
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение sts »

Спасибо за ответ
особенно за result := get_caller_addr(get_frame);

Вообщем скомпилилось, и даже чето работает :)
select выполняется но "бегать" (Next\Prev) не получается - невразумительная ошибка
отсюда вопрос - как отлаживать компоненты в лазарусе (точку останова)?
если прописать пути к исходникам (компонента) то при перекомпиляции проекта
они тоже компилятся и как следствие лазарус пытается перекомпилять себя
мол cheksum изменился при этом не может найти некоторые исходники присущие дизайтайму типа ZPropertyEditor

В делфе я делал просто - копировал в свой проект нужный мне исходник, менял его и компилятор именно его брал при сборке
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Занимаясь столь глобальными вещами (как настройка пакета под платформу, на которой он раньше не работал), я бы деинсталлировал пакет из Лазаря и вначале отладил бы его в рантайме. Что, собственно, в соседних ветках и советуют делать.

Иначе, даже если разрулить пути к модулям, ошибки в пакете будут ронять Лазаря, и отладка превратится в сплошную головную боль.
sts
энтузиаст
Сообщения: 548
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение sts »

В общем добил я ее, работает в простейшем случае — просмотр запроса в гриде (другое не смотрел), Основная проблема в патологической склонности авторов ZEOS хранить Pointer в Integer и наоборот.
Но то что хотел так и не получил — русского языка, хотя под винду32 русский работает.

Плохо что в Лазарусе нет штатного режима редактирования и отладки компонентов которые уже лежат на открытой форме.
Ответить