Lazarus 2.0.10 + FPC 3.2 TSTrings.SaveToStream

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

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

Lazarus 2.0.10 + FPC 3.2 TSTrings.SaveToStream

Сообщение *Rik* » 19.01.2021 14:19:37

Поставил Lazarus 2.0.10 + FPC 3.2 версия 64351M на Linux (ставил через fpcdelux как стабильную) и версия 63526 на Windows ставил инсталлятором с официальной раздачи на SourceForge.
Собрал свои проекты и обнаружил что все вызовы procedure TSTrings.SaveToStream(S: TStream) приводят к AccessViolation
Сам TSTrings.SaveToStream(S: TStream) вызывает procedure TStrings.SaveToStream(Stream: TStream; IgnoreEncoding: Boolean); Где IgnoreEncoding передается как False, Если IgnoreEncoding заменить на True то всё работает.
То же самое с TSTring.LoadFromFile.

Чё ито? Кто то столкнулся ещё с этим?
Мне надо принять какое то решение, то ли на предыдущем Lazarus и FPC оставаться, то ли как то бороться с этим.
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 426
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Lazarus 2.0.10 + FPC 3.2 TSTrings.SaveToStream

Сообщение Awkward » 19.01.2021 16:17:21

Ну, для начала, я б посоветовал не использовать TStrings метод напрямую, а только через TStringList. Во-вторых, если считаете это ошибкой, пишите багрепорт.
Awkward
новенький
 
Сообщения: 43
Зарегистрирован: 19.01.2017 00:06:47

Re: Lazarus 2.0.10 + FPC 3.2 TSTrings.SaveToStream

Сообщение Ichthyander » 19.01.2021 17:35:38

TStrings же никогда нельзя было напрямую использовать?
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 668
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Lazarus 2.0.10 + FPC 3.2 TSTrings.SaveToStream

Сообщение *Rik* » 19.01.2021 17:44:10

На самом деле используется TStringList, при этом попытался создать тестовый проект новый, самый простетский, в нем всё работает, а в старом большом проекте такая вот фигня, при чем в предыдущей версии Lazarus и FPC, вообще ни каких проблем. проблема началась с перехода на FPC 3.2 и Lazarus 2.0.10.
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 426
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Lazarus 2.0.10 + FPC 3.2 TSTrings.SaveToStream

Сообщение zub » 20.01.2021 04:51:42

Это бага в программе. Дебажиш, выясняеш где падает и почему. Емнип чтоб подебажить внутри TStringList - надо собрать fpc с отладочной инфой.
хрустальные шары мне шепчут что ты гдето установил для своего TSTrings Encoding или DefaultEncoding, потом убил их и пытаешся читатьписать убитым EncodingDefaultEncoding

Добавлено спустя 4 минуты 19 секунд:
>>Мне надо принять какое то решение, то ли на предыдущем Lazarus и FPC оставаться, то ли как то бороться с этим.
Что тут принимать, конечно переходишь на актуальную версию, правишь вскрывшиеся баги и адаптируешь под новые реалии
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Lazarus 2.0.10 + FPC 3.2 TSTrings.SaveToStream

Сообщение *Rik* » 20.01.2021 11:25:13

zub писал(а):Это бага в программе. Дебажиш, выясняеш где падает и почему. Емнип чтоб подебажить внутри TStringList - надо собрать fpc с отладочной инфой.
хрустальные шары мне шепчут что ты гдето установил для своего TSTrings Encoding или DefaultEncoding, потом убил их и пытаешся читатьписать убитым EncodingDefaultEncoding

Добавлено спустя 4 минуты 19 секунд:
>>Мне надо принять какое то решение, то ли на предыдущем Lazarus и FPC оставаться, то ли как то бороться с этим.
Что тут принимать, конечно переходишь на актуальную версию, правишь вскрывшиеся баги и адаптируешь под новые реалии

Проблема в DefaultEncoding, я его точно ни где не убивал, вообще только сейчас узнал что такое свойство появилось. Оно почему то = nil, если его указать явно, все работает. По какой то причине оно изначально не создается именно в большом старом проекте. Все вызовы TSTring.SaveToStream, TStrings.LoadFromStream, везде, включая все сторонние компоненты приводят к AV.
Код: Выделить всё
var
  SL: TStringList;
  F: TFileStream;
begin
  SL := TStringList.Create;
  if SL.DefaultEncoding = nil then
  begin
     ShowMessage('nil');
     SL.DefaultEncoding = SL.Encoding.UTF8;
  end;
 
  F := TFileStream.Create(GetUserDir + DirectorySeparator + 'test.txt', fmCreate);
  try
    SL.Add('ыаыаыа);
    SL.SaveToStream(F);
  finally
    SL.Free;
    F.Free;
  end;
end


Добавлено спустя 1 час 57 минут 19 секунд:
Переустановил всё по новой, почистил лишние файлы, проблема пропала. Походу глюк был...
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 426
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru