В консольном приложении вызывается процедура проверки содержимого xml-фала находящегося в zip-файле. Для доступа использую компоненты ZIPForge + delphi'йский XML парсер.
Код | procedure chk_pack(file_name: string); var All, I: Integer; src_pack, xml_src: TStream; xml_obj: TXMLDocument; zip_obj: TZIPForge; begin src_pack := TFileStream.Create(file_name, fmOpenRead or fmShareDenyNone); try zip_obj := TZIPForge.Create(nil); try zip_obj.OpenArchive(src_pack, False); try xml_src := TMemoryStream.Create; try zip_obj.ExtractToStream('info.xml', xml_src); xml_src.Position := 0; xml_obj := TXMLDocument.Create(nil); try xml_obj.LoadFromStream(xml_src); with xml_obj.DocumentElement do // <- ОШИБКА if SameText(NodeName, 'update') then begin { ... } end else { ... } ; finally xml_obj.Free; end; finally xml_src.Free; end; finally zip_obj.CloseArchive; end; finally zip_obj.Free; end; finally src_pack.Free; end; end;
|
Вручную создаю и удаляю объект TXMLDocument с AOwner = nil. В этом и проблема. При обращении к свойству DocumentElement вызывается вылетает AccessViolation. Если же AOwner = Self - все OK отрабатывает.
Функция будет вызываться единожды и не зависеть от других функции консольного приложения. Как передать Owner?
Вот так будет работать..., но это маразм брать одну функцию в класс.
Код | TMyClass = class(TComponent) public procedure chk_pack(file_name: string); end;
|
|