Dynamiczny TXMLDocument i AV przy odczycie

0

Dalej męczę tego mojego TXMLDocumenta dynamicznego. No i teraz jest lepiej, bo CoInitialize działa, natomiast teraz mam ciągle AV z którymi męczę się już od dłuższego czasu.

Mam moduł, w którym jest klasa parsująca skrypt XML i wydobywająca z niego dane. Z aplikacji konsolwoej tworzę tą klasę i wywołuję kilka metod.

{ tutaj inicjalizacje, tworzenie itp. }
Parser.load_script('E:\Marcin\!Projekty\Delphi\XScript\example01.xml');
Parser.execute_script();
Writeln(Parser.return_output); //wyświetla zwrócone rzeczy
Readln; //aby można było przeczytać

w execute_script() jest coś takiego (XMLParser to komponent typu TXMLDocument).

procedure TXSParser.execute_script;
begin
  //pre_parse();
  { czekamy aż się załaduje cały dokument }
  repeat Application.ProcessMessages until XMLParser.AsyncLoadState = 4;
  // i tutaj następuej Access Violation
  Output.Add(XMLParser.DocumentElement.LocalName);
  XMLParser.Active := False;
end;

No i niestety w linijce gdzie odwołuję się do XMLParser.DocumentElement, albo do XMLParser.Nodes[1], albo do czegokolwiek innego dostaję AV. A i tak się o tym dowiedziałem przypadkiem, bo DElphi po prostu zamyka program bez pokazania wyjątku. Dopiero po "normalnym" uruchomieniu pod cmd dostałem "Program wykonał nieprawidłową operację", a potem się w konsoli pojawia "Exception EAccessViolation in module XSConsoleInt.exe at 00960A53. Access violation at address 00961A53. Write of address 00000000.". I za cholerę nie mog dojść czemu się tak dzieje. W helpie jest, że to możę być, kiedy dokument nie jest do końca załadowany, ale AsyncLoadState wskazuje 4, co dla MSXML jest wartością "Completed" :/

Jakieś pomysły?

0

Problem się sam rozwiązał. Poprzez nieużywanie TXMLDocument, a IXMLDocument i zwracającej taki obiekt funkcji LoadXMLDocument. I teraz jest już wszystko OK.

Ale dlaczego to nie działało to nie mam pojęcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1