Форум: "Начинающим";
Текущий архив: 2010.10.31;
Скачать: [xml.tar.bz2];
ВнизTXMLDocument Найти похожие ветки
← →
Stenfit (2010-08-06 15:21) [0]В консольном приложении вызывается процедура проверки содержимого 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 отрабатывает. В чем проблема?
← →
Юрий Зотов © (2010-08-06 15:30) [1]When TXMLDocument is created without an Owner , it behaves like an interfaced object. That is, when all references to its interface are released, the TXMLDocument instance is automatically freed. When TXMLDocument is created with an Owner , however, it behaves like any other component, and is freed by its Owner .
← →
Stenfit (2010-08-06 15:36) [2]И что теперь делать? Функция будет вызываться единожды и не зависеть от других функции консольного приложения. Как передать Owner?
Вот так будет работать..., но это маразм брать одну функцию в класс.
TMyClass = class(TComponent)
public
function IsOKPack(const file_name: string): Boolean;
end;
← →
Юрий Зотов © (2010-08-06 15:51) [3]Достаточно изменить объявление переменной:
xml_obj: IXMLDocument;
и убрать вызовxml_obj.Free
← →
Stenfit (2010-08-06 15:53) [4]спасибо. тему можно закрывать.
← →
Медвежонок Пятачок © (2010-08-06 16:30) [5]достаточно никогда не вызывать фри если создал с оунером=нил
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.10.31;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.003 c