Различия в типах Delphi и Lazarus и их размер

Вопросы программирования и использования среды Lazarus.

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

Re: Различия в типах Delphi и Lazarus и их размер

Сообщение скалогрыз » 12.06.2016 19:34:04

вполне обычная проблема при портировании кода Делфи на FPC.

Дело в том, что типы перечислений (enumerate), коим является TFontPitch, в FPC по-умолчанию имеют размер 4 байта (32-бита).
В делфи, enumerate упаковываются под минимальный размер, необхдоимый для их хранения - в данном случае 1 байт.

FPC можно указать упаковывать перечисления точно так же, как и делфи, директировой $PACKENUM

Добавлено спустя 5 минут 9 секунд:
vfiuchcikicshuusrch писал(а):в исходниках лазаруса нигде так и не нашел что это за тип такой TFontPitch = (fpDefault, fpVariable, fpFixed);
и почему он равен 4 (integer)

TFontPitch объявлен в модуле Graphics. (lazarus/lcl/graphics.pp).

Как варинат, можно попробовать пересобрать LCL с упаковкой перечислений до делфи совместимости, но я бы не стал, т.к. мало ли что-нить где-нить на размер в 4 байта завязано.

Вместо этого, предлагаю изменить чтение/запись файла, чтобы она всегда использовала делфи-совместимый запись значения. Т.е. кокретно в случае лазаруса делала бы конвертацию из 4х в 1 байт.

и кстати, приведение TFontPitch к байту должно работать без проблем.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Различия в типах Delphi и Lazarus и их размер

Сообщение runewalsh » 12.06.2016 19:50:43

Да, лучший вариант, читай в промежуточный longword и уже его приводи к энуму.
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 579
Зарегистрирован: 27.04.2010 00:15:25


Вернуться в Lazarus

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

Сейчас этот форум просматривают: Google [Bot] и гости: 249

Рейтинг@Mail.ru