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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при работе с TXMLDocument в потоке, ошибка при обращении к DocumentElement 
:(
    Опции темы
hawkins
Дата 13.7.2009, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ошибка возникает в самом начале метода Execute, после загрузки файла в TXMLDocument и обращении к DocumentElement. Причем
 если не загружать из файла, а просто активировать TXMLDocument и создать DocumentElement, то ошибки нет. Тот же код в главном потоке работает без ошибок.

Вот сокращенный код:

Код

interface
 uses Windows, Classes, SysUtils, XMLDoc, XMLIntf, ActiveX;

type
 TMainThread = class(TThread)
  private
    { Private declarations }
  protected
    XML_: TXMLDocument;
    XMLStruct: TXMLDocument;
    XMLBase: TXMLDocument;
    procedure Execute; override;
  public
   constructor Create;  
 end;

var
 basefile: string;

implementation

constructor TMainThread.Create;
begin
 inherited Create(true);
 XMLBase:=TXMLDocument.Create(nil);
end;

procedure TMainThread.Execute;
var
 XBase: IXMLNode;

begin
  CoInitialize(nil);

  if not FileExists(basefile) then
  begin
   xmlBase.Active:=true;
   xmlBase.DocumentElement:=xmlBase.CreateElement('base','');
   xmlBase.DocumentElement.AddChild('records');

   xmlBase.Encoding:='UTF-8';
   xmlBase.Version:='1.0';
   xmlBase.SaveToFile(basefile);
  end
  else
   xmlBase.LoadFromFile(basefile);

  if not xmlBase.Active then
   xmlBase.Active:=true;

  XBase:=xmlBase.DocumentElement;

  if XBase=nil then  exit;
...
end;

end.



ошибка на строке XBase:=xmlBase.DocumentElement; как написал уже, если по условию работает код в if not FileExists(basefile) then
  begin... То ошибки нет, а если идет загрузка из файла есть. Даже не знаю на что грешить.

Добавлено через 5 минут и 25 секунд
содержимое xml файла такое: 

Код

<?xml version="1.0" encoding="UTF-8"?>
<base><records/></base>

PM MAIL   Вверх
hawkins
Дата 13.7.2009, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



кажется нашел причину, при создании объекта надо владельцем делать Application. То есть так XMLBase:=TXMLDocument.Create(Application);
Теперь ошибки нет.

Добавлено через 2 минуты и 20 секунд
Но на что влияет сдесь смена владелеца TXMLDocument (кроме его уничтожения вместе с владельцем Application) не знаю...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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