ZEOSLib и 64бит

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

ZEOSLib и 64бит

Сообщение sts » 04.04.2008 17:13:58

есть
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

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

Сообщение Sergei I. Gorelkin » 04.04.2008 21:00:02

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

Ассемблер в ReturnAddr, если правильно понимаю, целиком заменяется на кроссплатформенное
result := get_caller_addr(get_frame);
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение sts » 07.04.2008 16:44:30

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

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

В делфе я делал просто - копировал в свой проект нужный мне исходник, менял его и компилятор именно его брал при сборке
sts
постоялец
 
Сообщения: 431
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение Sergei I. Gorelkin » 07.04.2008 18:07:11

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

Иначе, даже если разрулить пути к модулям, ошибки в пакете будут ронять Лазаря, и отладка превратится в сплошную головную боль.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение sts » 08.04.2008 12:01:33

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

Плохо что в Лазарусе нет штатного режима редактирования и отладки компонентов которые уже лежат на открытой форме.
sts
постоялец
 
Сообщения: 431
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru