Форум: "Основная";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
ВнизTXMLDocument. Вылетает ошибка при завершении программы Найти похожие ветки
← →
ionn (2005-02-20 22:45) [0]Здрасьте,
Написал процедуру, она читает ХМЛ файл,
в начале поставил
TXMLDocument.Active:= true
...
считываю
...
Active:=false; //<-Так вот на этой строчке прога вылетает, я её убрал, теперь прога вылетает при закрытии.
Как избавиться? И вообще я правильно использую этот Актив?
← →
GanibalLector © (2005-02-20 22:51) [1]>TXMLDocument
Это ШО такое компонент?
По сабжу: в nil его или в Unassigned попробуй
← →
Eraser © (2005-02-20 22:53) [2]ionn
Вылетает ошибка при завершении программы
Услуги телепатов не на этом сайте!
Приводи название и код ошибки, и желательно участок кода.
← →
ionn (2005-02-20 22:58) [3]Это компонент для работы с XML файлами.
Ошибка:
Exception EAccessViolation in module Project1.exe at 00006594.
Access violation at addres 00406594 in module Project1.exe. Read of address 00000008.
← →
Eraser © (2005-02-20 23:00) [4]ionn
Уже что-то. Обращение по несуществующему адресу.
Теперь попробуй нажать F9 и посмотреть в каком участке кода остановиться отладчик во время этой ошибки.
Ты вообще знаком с отладчиком? )
← →
ionn (2005-02-20 23:05) [5]В файле проекта, на строке
end.
вываливается.
← →
Eraser © (2005-02-20 23:06) [6]Понятно! Попробуй в форме в событии OnClose вписать
XMLDocument.Free;
не забудь Action:=caFree;
← →
Eraser © (2005-02-20 23:07) [7]А лучше приведи код.
← →
ionn (2005-02-20 23:08) [8]после этого по F7 проходит еще по
finalization модулей GDIOBJ и DirectDraw
← →
Eraser © (2005-02-20 23:12) [9]ionn
после этого
Чего ЭТОГО?
finalization модулей GDIOBJ и DirectDraw
тут собака и порылась скорее всего...
← →
ionn (2005-02-20 23:12) [10]Фрии не помагает
procedure cSystem.OpenConfig(name:string);
var n,conf,node,nn,vr:IXMLNode;
i,j:integer;
setup:cSetup;
s:^rStageParam;
pr:^real; pi:^integer;
begin
Form1.XML.Active:=true;
n:=Form1.XML.DocumentElement;
for i:=0 to n.ChildNodes.Count-1 do
begin
if n.ChildNodes[i].Attributes["name"]=name then
begin
conf:=n.ChildNodes[i];
//AdvSetup
node:=conf.ChildNodes["AdvSetup"];
cAdvSetup(sp_setup[current]).s_okno:=YN(node.ChildValues["okno"]);
cAdvSetup(sp_setup[current]).s_resu:=YN(node.ChildValues["resu"]);
cAdvSetup(sp_setup[current]).s_dial:=YN(node.ChildValues["dial"]);
//Meneger
node:=conf.ChildNodes["Meneger"];
meneger.Demo:=YN(node.ChildValues["demo"]);
meneger.started:=YN(node.ChildValues["started"]);
meneger.created:=YN(node.ChildValues["created"]);
meneger.show_progress:=YN(node.ChildValues["progress"]);
....
break;
end;
end;
// - тута раньше было Active:=false
end;
Если эту процедуру не вызывать, то всё нормально
← →
ionn (2005-02-20 23:13) [11]ЭТОГО - это сообщение об ошибке
← →
Eraser © (2005-02-20 23:16) [12]ionn
А где ресурсы освобождаются? Типа n := null;
← →
ionn (2005-02-20 23:18) [13]А они в деструкторе не должны освобождаться? который вывзывается самостоятельно при завершении программы или выходе из области видимости.
Или у меня не правильные предстваления о освобождении ресурсов?
← →
Eraser © (2005-02-20 23:21) [14]ionn
Честно говоря я с интерфейсами не часто сталкивался, но думаю дело всётаки не в них...
А они в деструкторе не должны освобождаться?
Именно из за этого и ошибка!
Советую протрэйсить модуль этого компонента.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.032 c