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?