|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
TReader - при убиении загруженного компонента получаю AV
Доброе всем время суток.
Камрады, кто-нибудь сталкивался вот с таким: На форме есть TChart, назовем его CH. Переписываем его через TReader.ReadRootComponent. При попытке убить CH получаем AV Access violation at address 09472F8E in module 'osa_chart.dll'. Read of address 005D6000. Соответственно, то же самое происходит при закрытии формы. Как бороться - непонятно Упреждая некоторые вопросы. 1. Stream.ReadComponent не прокатывает, пробовал 2. Ежели не загружать CH из ридера, все нормально работает. 3. Owner загруженому чарту стаится правильный. 4. Загружается все ровно и правильно, как было сохранено - то и получаю. Кусок кода, как загружается: Код:
var St: TMemoryStream; ... St.Seek(0,2); St.Seek(0,0); R := TReader.Create(St, 4096); FreeAndNil(CH); // пробовал и не убивать - те же косяки CH := R.ReadRootComponent(nil) as TChart; CH.Parent := Self; InsertComponent(CH); FreeAndNil(R); Вот, примерно так. |
#2
|
|||
|
|||
Как говорилось в одном анекдоте - война окончена, наш концлагерь закрывается, спасибо за внимание
Вопрос решен так: > var St: TMemoryStream; C: TChart; > .... > St.Seek(0,2); St.Seek(0,0); > R := TReader.Create(St, 4096); Вот вместо вот этого > CH := R.ReadRootComponent(nil) as TChart; > CH.Parent := Self; > InsertComponent(CH); написал так: C := R.ReadRootComponent(nil) as TChart; CH.Assign( C ); FreeAndNil( C ); > FreeAndNil(R); Помогло |