AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Interface-Element in TStrings.Objects schreiben
Thema durchsuchen
Ansicht
Themen-Optionen

Interface-Element in TStrings.Objects schreiben

Ein Thema von Stevie · begonnen am 11. Feb 2005 · letzter Beitrag vom 11. Feb 2005
Antwort Antwort
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Interface-Element in TStrings.Objects schreiben

  Alt 11. Feb 2005, 13:10
Hallo Leute,

ich bin dabei, eine XML-Datei mit TXMLDocument auszulesen.
Dabei sollen bestimmte Nodes für einen späteren gebrauch gespeichert werden.
Dies mache ich so:
Delphi-Quellcode:
var
  Objects: TStrings;
  XMLNode: IXMLNode;
begin
  {...}
  Objects.AddObject(XMLNode.Attributes['name'], TXMLNode(XMLNode));
Wenn ich hinterher wieder auf das Object zugreifen will, dann kommt eine Zugriffsverletzung.
Delphi-Quellcode:
for i := 0 to Pred(Objects.Count) do
  XMLNode := TXMLNode(Objects.Objects[i]);
Wahrscheinlich speichere ich oben die Instanz falsch ab, aber wie mache ich es richtig??

MfG
Stevie
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#2

Re: Interface-Element in TStrings.Objects schreiben

  Alt 11. Feb 2005, 13:20
Du versuchst ein Interface in eine "richtige" Instanz zu boxen.
Interfaces sind in Delphi32 keine wirklichen Objektreferenzen (versuche einfach mal "SomeInterface is TObject" ).
Du musst also einen Cast auf IXmlNode statt TXmlNode machen um das Ding aus der Liste zu kriegen.

BTW: Warum machst du das über eine StringList? Das ist doch nun wirklich ganz schön umständlich und unleserlich. (Dieses ewige sich-einen-wolf-rumgecaste....)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

Re: Interface-Element in TStrings.Objects schreiben

  Alt 11. Feb 2005, 13:25
Ok, dann erklär ich am besten gleich mein Anliegen, du hast bestimmt ne Idee...

Ich iteriere über mein XML-Dokument und möchte mir bestimmte Nodes merken,
um später direkt auf diese Nodes zuzugreifen.

Ich kann aber keine IXMLNode in Objects speichern, weil dort ein TObject-Element erwartet wird...

Soll ich mir nen Interface-Pointer-Array machen??

Nachtrag:
Ich hab's jetzt so gemacht:
Objects.AddObject(ObjectName, Pointer(XMLNode)); XMLNode := IXMLNode(Pointer(Objects.Objects[i])); Ok, ist etwas viel rumgecaste, aber was soll's...
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Interface-Element in TStrings.Objects schreiben

  Alt 11. Feb 2005, 13:48
Zitat von Stevie:
Soll ich mir nen Interface-Pointer-Array machen??
Nö, dann nimm besser TInterfaceList.
Du kannst Interfacepointer auf in TStrings.Objects[] unterbringen; das wird aber etwas heikel
wegen der Referenzzählung. (ich würd's nicht empfehlen)
Delphi-Quellcode:
XMLNode: IXMLNode;
begin
  {...} 
  XMLNode.AddRef; // sonst verabschiedet sich das Object hinter dem Interface
  Objects.AddObject(XMLNode.Attributes['name'], TObject(Pointer(XMLNode)));

  {...}
  // und später freigeben
  for i :=0 to objects.Count-1 do
  begin
     XMLNode := IXMLNode(Pointer(Objects.Objects[i]));
     XMLNode.Release;
  end;
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz