Форум: "Основная";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];
ВнизTService + TThread + TXMLDocuent Найти похожие ветки
← →
iXT © (2007-02-16 15:29) [0]Приветствую!
Проблемка появилась.
Делаю службу. Та создает поток. В потоке создается TXMLDocument приблизительно так:
CoInitialize(nil);
XML:=TXMLDocument.Create(nil);
XML.FileName:="\\ServerName\.......\file.xml";
XML.Active:=true;
for i:= 0 to XML.DocumentElement.ChildNodes.Count - 1 do
...
На выделенном участке возникает AV, причем Active=true в этот момент.
xml-фаил правильный, если с ним работать как с VCL на форме, то никаких проблем не возникает.
У кого есть соображения по этому поводу?
← →
Сергей М. © (2007-02-16 15:32) [1]
> У кого есть соображения по этому поводу?
Соображения-то примитивные, мог бы и сам дотумкать)... На то отладчик тебе дан)
Либо
1. XML.DocumentElement = nil
Либо
2. XML.DocumentElement.ChildNodes = nil
Третьего не дано.
← →
Сергей М. © (2007-02-16 15:32) [2]
> TService + TThread
А это вообще всуе упомянуто)
← →
iXT © (2007-02-16 16:03) [3]
> А это вообще всуе упомянуто)
Да это до этого на CoInitialize ругался. Мало ли еще чего из этой оперы OLE
> 1. XML.DocumentElement = nil
>
> Либо
> 2. XML.DocumentElement.ChildNodes = nil
if XML.DocumentElement = nil
Вылетает AV, хотя XML<>nil
Пробывал xml с локального диска грузить - результат тот же
Т.е. Файл есть, он рабочий и при обычной работе с ним Count=1
← →
Reindeer Moss Eater © (2007-02-16 16:05) [4]if FileExists(AFileName) then
xml.Load(AFileName)
Если к тому же файл на сетевом томе, то просто нет прав на файл для сервиса
← →
Сергей М. © (2007-02-16 16:14) [5]
> Да это до этого на CoInitialize ругался.
А кого оно интересует ?)
> Вылетает AV, хотя XML<>nil
XML-то не nil) ...
DocumentElement = nil !
Умение хотя бы элементарно пользоваться отладчиком - оно рулез)
← →
Сергей М. © (2007-02-16 16:14) [6]
> Да это до этого на CoInitialize ругался.
А кого оно интересует ?)
> Вылетает AV, хотя XML<>nil
XML-то не nil) ...
DocumentElement = nil !
Умение хотя бы элементарно пользоваться отладчиком - оно рулез)
← →
Плохиш © (2007-02-16 16:26) [7]
> iXT © (16.02.07 15:29)
Дарю :-)
procedure TXMLClass.Open(AFileName: string; CreateIfNotExists: Boolean = True);
begin
if XML <> nil then XML.Free;
XML := TXMLDocument.Create(self);
try
XML.Options := [doNodeAutoCreate, doAttrNull, doAutoPrefix, doNamespaceDecl];
XML.ParseOptions := [];
XML.DOMVendor := GetDOMVendor("");
fPath := AFileName;
if FileExists(fPath) then
begin
XML.LoadFromFile(fPath);
end
else
begin
XML.XML.Clear;
XML.Active := true;
XML.Version := "1.0";
XML.Encoding := "UTF-8";
XML.StandAlone := "no";
XML.AddChild("xml");
if CreateIfNotExists then XML.SaveToFile(fPath);
end;
Opened := true;
except
XML.Free;
XML := nil;
Opened := false;
raise;
end;
end;
Self на nil сам заменишь, да и к своим нуждам привяжешь.
← →
iXT © (2007-02-16 16:40) [8]
> Умение хотя бы элементарно пользоваться отладчиком - оно
> рулез)
И как пробежаться отладчиком по сервису?
> Reindeer Moss Eater © (16.02.07 16:05) [4]
> if FileExists(AFileName) then
> xml.Load(AFileName)
>
> Если к тому же файл на сетевом томе, то просто нет прав
> на файл для сервиса
Ни то и не другое
Если файла нет, то при active ругается что не найден
Права тоже все есть. Кроме того, для очистки совести:
> Пробывал xml с локального диска грузить - результат тот
> же
> Т.е. Файл есть, он рабочий и при обычной работе с ним Count=1
← →
iXT © (2007-02-16 16:41) [9]
> Плохиш © (16.02.07 16:26) [7]
Спасибо!
щас попробую
← →
Сергей М. © (2007-02-16 16:42) [10]
> как.. ?
Каком кверху)
На то существует станд.справка по теме "Debugging service applications".
Разуй глаза - на то и справка)
← →
Reindeer Moss Eater © (2007-02-16 16:42) [11]Может еще скажешь, что и xml.xml.text содержит то, что ожидается?
← →
Плохиш © (2007-02-16 16:44) [12]
> Сергей М. © (16.02.07 16:42) [10]
> Reindeer Moss Eater © (16.02.07 16:42) [11]
Господа, конференция называется "Начинающим" :-) не располяйтесь...
← →
Плохиш © (2007-02-16 16:46) [13]О, блин, как "Основная" 8-0 Это всё происки люниксоидов...
← →
Сергей М. © (2007-02-16 16:47) [14]
> Плохиш © (16.02.07 16:44) [12]
"Начинающим" как раз и пытаются объяснить, что все "великие дела" начинаются с досконального изучения возможностей встроенного отладчика)
← →
Сергей М. © (2007-02-16 16:48) [15]
> Плохиш © (16.02.07 16:46) [13]
Пингвины - они такие заразы)
← →
iXT © (2007-02-16 20:53) [16]Господа!
Что можно сказать, "Век живи, век учись". Ну не знал я что сервис в отладчике можно прогонять. Ну расстреляйте меня!
Да, и если начинающий возьмется создовать службу, да с потоками, да.... и т.д. , то ИМХО у него появится куча вопросов совсем другого характера.
> Плохиш © (16.02.07 16:26) [7]
>
> > iXT © (16.02.07 15:29)
> XML.Options := [doNodeAutoCreate, doAttrNull, doAutoPrefix,
> doNamespaceDecl];
> XML.ParseOptions := [];
> XML.DOMVendor := GetDOMVendor("MSXML");
А разве они по умолчанию не должны присваиваться?
Поставил, там ситуация не поменялась, да и домой ушел, так что в понедельник помучаю.
Спасибо еще раз.
← →
Плохиш © (2007-02-18 03:07) [17]
> > XML.DOMVendor := GetDOMVendor("MSXML");
>
> А разве они по умолчанию не должны присваиваться?
> Поставил, там ситуация не поменялась, да и домой ушел, так
> что в понедельник помучаю.
Вообще-то я этого не писал, а предлагал использовать Vendor по умолчанию. А к показанному, надеюсь модуль msxmldom подключить не забыл?
Я использую xercesxmldom, т.к. ms* в люниксе нету :-)
← →
iXT © (2007-02-19 11:22) [18]
> Вообще-то я этого не писал, а предлагал использовать Vendor
> по умолчанию. А к показанному, надеюсь модуль msxmldom подключить
> не забыл?
Да, разумеется приципил.
Тока вот ни при
GetDOMVendor("MSXML")
ни
GetDOMVendor("")
ничего не меняется :(
если запускать из отладчика (Спасибо Сергей М.), то он еще раньше отваливает на AV при LoadFromFile
Без отладчика, он пробегал там без ошибок (получено ведением лога)
File разумеется Exists
← →
SlymRO (2007-02-19 13:26) [19]а чем вам CreateOLEObject("MSXML.DOMDocument"); не нравится?
← →
Reindeer Moss Eater © (2007-02-19 13:56) [20]Вообще так, как описано, - не бывает.
Просто не бывает.
Думаю причина AV в том, что этот конкретный экземпляр TXMLDocument - чисто интерфейсный (так как оунером в конструктор передан nil) и ссылка на него выходит из области видимости, после чего объект освобождается.
Ничем другим такое странное поведение не объяснить.
← →
iXT © (2007-02-19 17:35) [21]
> SlymRO (19.02.07 13:26) [19]
> а чем вам CreateOLEObject("MSXML.DOMDocument"); не нравится?
>
Я не говорил, что не нравится. Да и переделал это я уже не много.
Тут хотелось разобраться...
> Reindeer Moss Eater © (19.02.07 13:56) [20]
> так как оунером в конструктор передан nil
Может быть, покрайней мере похоже. xml-простейший ~=
<? xml version="1.0" encodng="windows-1251" standalone="yes"?>
<clients>
<client atr1="qqq" atr2="www" atr3="eee"/>
<clients>
← →
Reindeer Moss Eater © (2007-02-19 17:40) [22]Не знаю, простейший ли это xml, но то что он не валидный - это точно.
← →
Плохиш © (2007-02-20 00:57) [23]
> iXT © (19.02.07 11:22) [18]
> если запускать из отладчика (Спасибо Сергей М.), то он еще
> раньше отваливает на AV при LoadFromFile
Странно, всю ветку просмотрел и нашёл только одно упоминание LoadFromFile в моём работающем коде. Опять ошибку из 17й строки ищем там где светло?
← →
Reindeer Moss Eater © (2007-02-20 09:25) [24]У него сам xml кривой, а мы тут по фотографии лечить пытаемся.
← →
iXT © (2007-02-20 09:28) [25]Не надо искать в 17й :)
Он твой практически и есть, ну если очень хочется:
CoInitialize(nil);
XML:=TXMLDocument.Create(nil);
XML.Options := [doNodeAutoCreate, doAttrNull, doAutoPrefix, oNamespaceDecl];
XML.ParseOptions := [];
XML.DOMVendor := GetDOMVendor("");
XML.LoadFromFile("\\ServerName\.......\file.xml");
...
...
for i:= 0 to XML.DocumentElement.ChildNodes.Count - 1 do
...
...
Смысл было писать код? Ведь ничего не поменялось.
Да и переписал его под INI
← →
iXT © (2007-02-20 09:32) [26]
> Reindeer Moss Eater © (20.02.07 09:25) [24]
> У него сам xml кривой, а мы тут по фотографии лечить пытаемся.
>
Да не кривой он. Рабочий. Я писал его от руки, т.к. delphi и i-net на разных машинах. Ну забыл нерисовать "/". Я просто привел структуру.
← →
Reindeer Moss Eater © (2007-02-20 09:35) [27]Я и говорю, что мы здесь пытаемся искать ошибку не в реальном коде, а нарисованном тобой и приблизительно похожим на тот, в котором ошибка.
Ищем ошибку не в реальном xml, а приблизительно похожем на реальный.
← →
iXT © (2007-02-20 10:31) [28]Не надо искать ошибку в XML
> iXT © (16.02.07 15:29) [0]
> xml-фаил правильный, если с ним работать как с VCL на форме,
> то никаких проблем не возникает.
← →
Reindeer Moss Eater © (2007-02-20 11:10) [29]Все отличие "на форме/не на форме" в том, что в первом случае ссылка объектная, во втором - интерфейсная.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.045 c