Как освободить TOleStream в этом кусочке кода
Это из пользовательского обработчика пространства имен, сделанного в Delphi, который я использую для загрузки файлов в компонент веб-браузера.
Datastream: IStream; вар F: TFileStream; Пустышка: INT64; начать F:=TFileStream.Create(имя_файла fmOpenRead); CreateStreamOnHGlobal(0, True, DataStream); TOleStream.Create(DataStream).CopyFrom(F, F.Size); DataStream.Seek(0, STREAM_SEEK_SET, Dummy); TotalSize:= F.Size; F.Free; конец;
Проблема в том, что Fastmm4 выдает ошибку утечки памяти при завершении программы и сообщает, что TOleStream не был освобожден. Как мне это освободить? Если я положу TOleStream в переменную и назначить, как это
вар TOS:TOleStream; ТОС:=TOleStream.Create(DataStream) TOS.CopyFrom(F, F.Size); .. TOS.Free; Конец;
Я получаю ошибку (EAccessViolation указывает на TComObject.ObjRelease в ComObj) в конце, когда я освобождаю переменную TOS. Буду признателен за ваши комментарии и помощь. Эта проблема беспокоила меня уже некоторое время.
Мне также интересно, может ли это быть что-то с FastMM4? Может ли это давать ложную информацию? В немного кода, как показано ниже. Как обычно освобождается TOLEStream?
f.SaveToStream (TOleStream.Create (DataStream));
И есть ли способ отправить данные в поток данных без использования TFileStream?
Привет, Реми, Вы можете найти работающий демонстрационный проект обработчика пространства имен с fastmm и процедурой решения проблемы здесь: http://mode5.webs.com/namespace.7z Когда проект загружается, нажмите кнопку, чтобы загрузить обработчик пространства имен. файлы. При выходе вы должны получить ошибку fastmm. С уважением,
1 ответ
Если вам нужно передать интерфейс IStream чему-либо, вам нужно посмотреть на объект TStreamAdapter, вы можете создать его в TFileStream и передать его интерфейс IStream.