Ик!Похоже, ваш код либо предшествует датам, либо не использует длинные строки.Если вы хотите получить то же поведение, что и в вашем старом Delphi, тогда вам нужно заменить string
на ShortString
.
Я вижу, что вы уже пробовали это, и сообщаю, что это не удалось.Это действительно единственное объяснение, которое имеет какой-то смысл для меня, потому что все другие типы строк по сути являются указателями, и поэтому единственный способ, которым read
мог бы когда-либо работать, - это ShortString
.Миграция, которую вы пытаетесь выполнить, огромна, и вы, вероятно, столкнулись с огромным количеством проблем.
@ LU RD отмечает, что расположение записей в разных версиях Delphi может отличаться, поскольку вы не используете * 1009.* массив.Вы можете исследовать макет записи, используя две имеющиеся у вас версии Delphi.Вам нужно договориться о том, чтобы размер записей совпадал между версиями и чтобы смещения полей также совпадали.
На основе приведенных ниже комментариев добавление байта заполнения между pos и nr решит ваши проблемы.
bbil = record
path : string;
pos: byte;
_pad: byte;
nr: Word;
end;
Вы также можете добиться того же эффекта, установив параметр компилятора $ALIGN
на {$ALIGN ON}
, что, как я думаю, будет происходить с вещами.
В долгосрочной перспективе вам действительно следует избегать коротких строк, кодирования ANSI, прямого отображения между вашими внутренними записями и файлами данных и так далее.В краткосрочной перспективе вам, возможно, будет лучше приобрести ту же версию Delphi, которая использовалась для создания этого кода и использовать ее.Я ожидаю, что эта проблема будет лишь верхушкой айсберга.