Hallo Shmia!
Dein Vorschlag für den alternativen Code entspricht meiner ursprünglichen Funktion und funktioniert nicht, da sich diese Pointer tatsächlich ändern. Die Lösung war damals die Verwendung von IUnknown (siehe
damaliger Thread).
In der
XML-Struktur wird nichts verändert solange der Anwender nichts unternimmt. Da das Problem auch auftritt, wenn ich die Datei Lade und dann einfach für lange Zeit stehen lasse (die genaue Zeit konnte ich nicht ermitteln, scheint auch nicht konstant zu sein), kann ich ein Problem in meinem Code mit ziemlicher Sicherheit ausschließen (aber was ist schon sicher?).
Inzwischen habe ich mir eine kleine Debughilfe in das Programm eingebaut, die Informationen zu den Knoten ausgibt. Ich hoffe so das Problem besser eingrenzen zu können (Ist aber schwer, da es so selten auftritt).
Hallo Marabu!
Ehrlich gesagt überfordertst Du mich im Moment noch ein wenig (ich hoffe, dass ich weiter lerne...).
Ich möchte bezüglich der Suche momentan auch nichts optimieren, solange ich das Problem nicht genau kenne, zumal ich das durch die verwendung von Containern auch nicht löse, oder? Hört sich aber interesant an, hast Du mir einen Link zu einem ähnlichen Beispiel, bei dem ich das mal nachvollziehen kann?
Dein Vorschlag mit dem Referenzcount: Bezieht sich der nur auf die "Containerlösung", oder kann ich das auch verwenden? Wie erhöht man den Referncount manuell? Bei der Suche habe ich auf die Schnelle nicht viel gefunden.
Ich kann mir das ehrlich gesagt im Moment nicht richtig vorstellen, was da zu tun ist.
Zitat:
Eventuell wurden die Schnittstellenzeiger zwischenzeitlich freigegeben und wieder neu erzeugt.
Welche Gründe könnte das haben? Vermutlich werden die Schnittstellenzeiger doch freigegeben, wenn diese nicht mehr verwendet werden (also der Referenz Count = 0 ist?). Da aber beide Strukturen (
XML und TreeView) vorhanden sind (der Treeview wird bei jedem Laden der
XML-Datei aufgebaut), sollte auch der RefernzCount <> 0 sein.
Wenn das und die Aussage
Zitat:
Zwei Interface-Pointer zeigen auf dasselbe Objekt, wenn ihre IUnknown-Pointer identisch sind.
so stimmt, dann müsste es doch eigentlich (auch dauerhaft) gehen, oder?
Gruß,
Stüff