Einzelnen Beitrag anzeigen

StTüff

Registriert seit: 3. Dez 2002
132 Beiträge
 
Delphi 2006 Enterprise
 
#1

IUnknown / XML-Link im TreeView

  Alt 22. Aug 2007, 14:17
Hallo!

Ich habe vor einiger Zeit mit Eurer Hilfe (vor allem marabu hat mir sehr geholfen) eine Funktion ausgeknobelt, mit der man durch vergleichen der Zeiger herausfinden kann, welcher XML-Knoten zum entsprechenden Treeviewknoten gehört.
Siehe auch:
http://www.delphipraxis.net/internal...220&highlight=

Die Funktion sieht wie folgt aus:
Delphi-Quellcode:
function FindTreeNodeXML(LinkedXMLNode:IXMLDOMNode):TTreeNode;
var
  cnt:integer;
  u_LinkedNode, u_chekNode : IUnknown;
begin
  //Durch alle Knoten laufen
  for cnt:= 0 to form1.TrView_Struktur.Items.Count-1 do
  begin
    u_chekNode := PNodeState(form1.TrView_Struktur.
                  Items[cnt].Data).XMLNode as IUnknown;
    u_LinkedNode := LinkedXMLNode as IUnknown;
    if u_chekNode = u_LinkedNode then
    begin
      result:=form1.TrView_Struktur.Items[cnt];
      exit;
    end;
  end;
  result:=nil;
end;
Das funktioniert soweit wunderbar. Leider kommte es aber sehr selten dazu, dass die Zeiger nicht mehr zueinander passen, obwohl (nachweislich) sowohl der XML-, als auch der Treeviewknoten noch vorhanden ist. Wenn die Baumansicht aktualisiert bzw. neu aufgebaut wird, stimmen die Zeiger wieder.

Da ich zwar beim Vergleich das Elemtarinterface (IUnknown) verwende, aber zu den TreeView-Knoten einfach den Zeiger auf den XML-Knoten, ist meine Vermutung, dass dieses Problem durch eine Aktion des Betriebssystems hervorgerufen wird, die dafür sorgt, dass die Zeiger nicht mehr zueinander passen?

Ist meine Theorie richtig?
Wenn ich schonn beim Speichern des Zeigers im Treeview IUnknown verwenden würde, würde das das Problem lösen?

Das Problem tritt sehr selten (meist nach langer Wartezeit) auf und ist dementsprechend schwer zu reproduzieren. Wenn es aber auftritt, so sind alle Zeiger, die im Treeview abgelegt wurden, betroffen.

Hat jemand eine Idee hierzu? Was kann die Ursache sein?

Gruß,

StTüff
  Mit Zitat antworten Zitat