AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Object as String?

Ein Thema von .chicken · begonnen am 12. Mai 2007 · letzter Beitrag vom 12. Mai 2007
Antwort Antwort
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#1

Object as String?

  Alt 12. Mai 2007, 09:54
Ich habe in einer ListBox sowohl unter den Strings als auch unter den Objekten Strings gespeichert.
Also
ListBox.Items.AddObject(TObject(MeinString)); //so ungefähr ^^ Wie kann ich MeinString nun als String zurückbekommen?
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Object as String?

  Alt 12. Mai 2007, 10:03
Hallo .chicken,

grundsätzlich geht das über den as Operator:

(meineListe.Objects[index] as TMyString).MyString Aber um einen String als TObject zu casten, musst du ihn vorher entsprechend verpacken.

Delphi-Quellcode:
type TMyString = class (TObject)
   MyString: String
end;
Dann kannst du TMyString als TObject in den Objects Array übernemhem und anschließend wie oben wieder casten.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#3

Re: Object as String?

  Alt 12. Mai 2007, 10:10
Anders geht das nich? Is ja blöd, sau der Umweg, aber gut da lässt sich wohl nix dran machen,.....
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Object as String?

  Alt 12. Mai 2007, 10:15
Hallo .chicken,

ein TObject ist letztlich ein Zeiger auf eine Struktur. Die Länge ist damit nur 32 Bit. Du kannst also einen String nicht auf ein TObject casten, weil die Längen unterschiedlich sind. Aber mit dem Verpacken, das würde funktionieren. Ober du nutzt eine zweite Liste. Oder du schreibst beide Strings in einen Eintrag und trennst sie mit einem eindeutigen Zeichen, dass in deinen Strings nicht vorkommen kann.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#5

Re: Object as String?

  Alt 12. Mai 2007, 10:18
Wenn du die Objekte in der Liste nich automatisch freigeben läßt, sondern dieses selber machst, dann sollte String(meineListe.Objects[index]), oder auch PChar(meineListe.Objects[index]) als Umkehrfunktion zu deiner Übergabe diehnen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#6

Re: Object as String?

  Alt 12. Mai 2007, 10:20
Was heisst nicht automatisch freigeben lässt? ^^
Also ich hab schonmal versucht sie mit String() zurückzuholen aber das hat nur bedingt geklappt (führte später zu nem Fehler). Ich versuchs nochmal mit PChar.
  Mit Zitat antworten Zitat
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#7

Re: Object as String?

  Alt 12. Mai 2007, 10:27
Ok, geht jetzt, danke
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: Object as String?

  Alt 12. Mai 2007, 10:31
Mit PChar hinterlässt du ein Speicherleck, da "S := PChar(P)" einen neuen String anlegt. Dein in P abgelegter (echte) String wird aber nie freigegeben, da der Compiler nicht weiß, dass sich hinter dem TObject ein String befindet.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#9

Re: Object as String?

  Alt 12. Mai 2007, 11:23
Was das Speicherleak angeht, sollte es so ja eigentlich keine Probleme geben.
Es kommt nur auf die "richtige" Konvertierung an, also welche Seite konvertiert wird.
Das worauf zugewiesen wird und nicht das was zugewiesen wird.

Aber stimmt schon, obwohl String und TObject doch eigentlich nur Zeiger auf ihre Struktur sind (je 32 Bit groß) kann man dem Konvertiertem String nichts Zuweisen, wärend komischer Weise das Auslesen geht?
Delphi-Quellcode:
// hinzufügen
i := ListBox1.Items.Add('Item');
String(ListBox1.Items.Objects[i]) := 'Object';

// löschen
String(ListBox1.Items.Objects[i]) := '';
ListBox1.Items.Delete(i);

// abfragen
Label1.Caption := String(ListBox1.Items.Objects[i]);
// oder
Label1.Caption := PChar(ListBox1.Items.Objects[i]);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Object as String?

  Alt 12. Mai 2007, 13:34
Hallo himitsu,

String ist aber kein Zeiger auf ein Struktur. String ist ja ein eigener Typ, der nicht zu einem TObject gecastet werden kann.
Albert
Live long and prosper


MrSpock
  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 23:43 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