Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1175137960
Steep
2007-03-29 07:12
2007.04.15
Нажатие клавиш


2-1174879808
sergeyxxx
2007-03-26 07:30
2007.04.15
Работа с принтером


6-1161717785
Psychedelic
2006-10-24 23:23
2007.04.15
Socks proxy компонент


2-1173974506
Washington
2007-03-15 19:01
2007.04.15
Оформление


15-1174476078
qaeng
2007-03-21 14:21
2007.04.15
gmtime64 / time64





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский