Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с TXMLDocument 
:(
    Опции темы
JS2
Дата 6.8.2010, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 25.3.2009

Репутация: нет
Всего: нет



В консольном приложении вызывается процедура проверки содержимого 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;

PM MAIL   Вверх
pseud
Дата 10.8.2010, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 10
Всего: 40



Цитата(JS2 @  6.8.2010,  14:39 Найти цитируемый пост)
Вручную создаю и удаляю объект TXMLDocument с AOwner = nil. В этом и проблема.

Да, именно в этом проблема. Сам ловил такие грабли.
Если же назначить владельца, то все будет ок.
Код

TXMLDocument.Create(любой наследник TComponent);

Только так и борюсь.


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
586
Дата 12.8.2010, 03:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 2
Всего: 146



JS2, передавай объект Application.
Код
uses Forms;

//...

xml_obj := TXMLDocument.Create(Application);


Это сообщение отредактировал(а) 586 - 12.8.2010, 03:38
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0590 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.