Вниз
Скачать: CL | DM;

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 вся ветка

Скачать: CL | DM;



Память: 0.52 MB
Время: 0.028 c
3-1169627984
iviom
2007-01-24 11:39
2007.04.15
Как сделать групповую операцию над ADODataSet?


2-1174653515
valua
2007-03-23 15:38
2007.04.15
DivMod


15-1174413688
][-m@n
2007-03-20 21:01
2007.04.15
SmartFon


2-1174818877
Kolan
2007-03-25 14:34
2007.04.15
Изменяющийся UI &amp;#151; как раелизовать?


2-1175132494
Wood
2007-03-29 05:41
2007.04.15
Позиция курсора в строке.




   Наверх