Einzelnen Beitrag anzeigen

Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Ab und zu unerklärliche Fehler beim Laden von XML-Daten

  Alt 19. Feb 2014, 14:57
Vielen dank für deine Antwort.
Ohne wirklich eine konkrete Idee zu haben würde ich als erstes schauen, ob der Aufruf von CoInitialize(..) auch wirklich immer klappt.
Das sollte eigentlich immer klappen, da mir sonst eine Exception mit der Meldung "Microsoft MSXML ist nicht installiert" entgegen springt.
Ob da weiterhin im Zusammenhang mit COM reinspielt, dass du deinen Thread direkt über die WinAPI aufmachst weiß ich nicht, könnte doch vielleicht auch sein?
Du meinst, weil ich dem erzeugten Thread keinen Handle zuweise? Das habe ich eben mal probiert - brachte jedoch keine Besserung.
// Übrigens:
Warum erstellst du ein TXMLDocument, explizit mit Application als Eigentümer-Komponente, gibst es aber selbst ein paar Zeilen später doch gewaltsam frei? Da würde ich auf IXMLDocument als Referenz-Typ umsteigen.
Ich schätze fast, dass hier das Hauptproblem liegt. Ich verwende, wie schon erwähnt, alte Quellen eines anderen Softwareentwicklers, um die Kompatibilität zu gewähren. Diese sind auch relativ umfangreich und ich würde wohl eine ganze Weile brauchen diese neu zu schreiben. Es ging ja bisher (mit Delphi 7 und XE2) auch immer.
Ich habe aber auch schonmal versucht an der ein oder anderen Stelle ein Interface zu benutzen - bisher aber auch ohne Erfolg.

Habe soeben auch nochmal mein XE5 auf den neusten Stand gebracht - hat aber auch nicht geholfen.

Schwierig :-/

Eine Idee, wie ich mich da Schritt für Schritt rantasten könnte? Es ist halt schwierig, da die Fehler unterschiedlich sind und an unterschiedlichen Stellen auftauchen.

/////Edit/////
Ich habe soeben mal das ganze Mutex/Thread-Gedöns weggelassen und siehe da: Es funktioniert. Zumindest konnte ich dem Programm nach 50 mal starten keinen Fehler entlocken.
Von der Theorie her sollte das ganze jedoch schon in einen Thread gepackt werden, da sehr viele Datensätze gelesen werden sollen und somit verhindert werden soll, dass jemand anders während des Ladens auf die Daten zugreift.

Aber das Problem lässt sich sicher lösen und ist mir deutlich lieber als ein Problem mit der XML-Verarbeitung.

Wie ich bisher vorgegangen bin:
(1) CreateMutex im Initialization-Abschnitt
(2) CreateThread und damit Aufruf der Procedure zum Laden
(3) CoInitialize -> WaitForSingleObject -> Laden -> ReleaseMutex
(4) CloseHandle im Finalization-Abschnitt

Das ganze habe ich auch schon etwas abgewandelt - jedoch ohne Erfolg.
Ich werd nochmal etwas Suchen und rumprobieren.

Geändert von Headbucket (19. Feb 2014 um 15:27 Uhr) Grund: Update
  Mit Zitat antworten Zitat