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