![]() |
untypisierter pointer
Hallo DPler,
ich habe in meinem Programm ein TListview, dessen untereigenschaft tlistitem die Eigenschaft "Data" hat, welches ein untypisierter Zeiger auf ein Beliebiges Objekt ist. Über diese Eigenschaft habe ich jetzt die einzelnen Einträge meines Datenarrays verlinkt, (Array of Tstringlist) habe jetzt also einen untypisierten pointer auf ein Tstringlist Objekt. Jetzt muss ich zwei Dinge herausfinden: Wie kann ich das TStringlist Objekt auf nil setzen, und nicht den pointer, ohne dass ich eine Exception bekomme? Und 2.: gibt es eine Möglichkeit über den Zeiger auf das TStringlist Objekt irgendwie eine referenz auf den Array of Tstringlist zu bekommen, welcher das TStringlist Objekt beherbergt? Danke an alle die sich die Zeit nehmen das hier zu lesen! Gruß Jan |
Re: untypisierter pointer
Zitat:
du müsstest also auch die data property auf NIL setzten und dann mit assigend(data) abfragen Zitat:
poste mal nen code beispiel... dann ist es immer einfach tipps zu geben. grüße paresy |
Re: untypisierter pointer
Hallo,
Zitat:
Delphi-Quellcode:
Es kommt jetzt darauf an wie du das Objekt in das data geschrieben hast. Wenn dort ein Zeiger auf ein TStringList steht klappt das wie oben, wenn du einfach das Objekt umgecastet und reingeschrieben hast müßte folgendes gehen:
type
TMyFunnyArrayType = array of TStringList; PMyFunnyArrayPointer = ^TMyFunnyArrayType; //... PMyFunnyArrayPointer(lv.items[1].data)^ // <-------------------------------------> // Das ist jetzt vom Typ array of TStringList
Delphi-Quellcode:
Für einfach native Typen (die nur aus einem Schlüsselwort bestehen) kann man sich diese indirektionsstufe mit zusätzlichen Typen auch sparen.
TMyFunnyArrayType(lv.items[1].data)
// <-------------------------------------> // Das ist jetzt vom Typ array of TStringList |
Re: untypisierter pointer
Hallo Paresy!
Also du hast schon recht, das gibt eine exception, wenn man einen pointer dereferenziert, der auf ein nichtmehr vorhandenes Objekt zeigt. Aber ich hatte schlicht und einfach die Zuweisung des Pointers "data" falsch gemacht, so dass ein löschen eine exception hervorgerufen hat. Habe das aber durch ausführliches Beschäftigen mit pointern alles begradigen können. Das mit dem Zeiger auf den Array hat den Sinn, dass ich eine Prozedur habe, welche einen übergebenen array in ein Tlistview schreibt. Nun kann es aber vorkommen, dass der array nur eine auswahl von pointern auf objekte vom typ tstringlist innerhalb eines anderen arrays ist. Und ich will innerhalb dieser prozedur aber herausfinden wie groß der array ist, in dem die objekte und nicht die pointer enthalten sind. Eine weitere Verwendung ist, dass ich innerhalb des Tlistviews ein tlistitem löschen will. Es soll dann auch das objekt vom typ tstringlist gelöscht werden, auf welches der pointer "Data" von dem tlistitem zeigt. Dieses tstringlist objekt befindet sich in einem array of tstringlist. nachdem ich das element des arrays gelöscht habe, will ich aber auch die länge des arrays aktualisieren, daher brauche ich einen pointer auf den array. Hallo fiasko! Das codesegment was du da verfasst hast wandelt doch einen untypisierten Zeiger "data" in einen zeigre vom typ tstringlist um, oder irre ich? Wenn aber doch "data" ein Zeiger auf ein objekt vom typen tstringlist ist, was habe ich dann gewonnen? ich will ja einen zeiger auf ein anderes objekt haben (auf das übergeordnete array von dem tstringlist objekt), nicht einen typisierten zeiger auf das selbe objekt. Kann natürlich auch sein, dass ich unfug rede, aber ich kann das hier nicht ausprobieren, werde das machen, sobald ich zuhause bin. Danke euch beiden vielmals dass ihr euch damit befasst habt! Gruß Jan |
Re: untypisierter pointer
Hallo,
Zitat:
Zitat:
|
Re: untypisierter pointer
Hallo Fiasko!
Ich hab einen Array of tstringlist, der eine Filmliste speichert. Die einzelnen tstringlists speichern also jeweils einen Film. Ich habe jetzt einen Zeiger auf einen dieser Filme, will aber über diesen Zeiger irgendwie an einen Zeiger auf den Array of tstringlist kommen, in dem die Filme gespeichert sind, damit ich dort auslesen kann, wieviele Filme ich in der Filmliste habe. Gruß Jan |
Re: untypisierter pointer
Hallo,
das geht so nicht. Du kannst nicht schauen wo es überall einen Zeiger auf dein Objekt gibt, du mußt dir also selber irgendwo dein array of TStringList speichern. |
Re: untypisierter pointer
Hallo,
was bitte schön ist ein untypisierter Zeiger? Gibts auch typisierte Zeiger? Der Ausdruck ist schon in sich Quatsch! Rainer |
Re: untypisierter pointer
Moin!
Zitat:
Pointer = untypirisierter Zeiger - ein Zeiger auf Daten unbestimmten Typs und daher kann man auch nicht sagen wie gross die Daten sind auf die der Pointer zeigt. Daher kann man auch schlecht mit New() eine Variable des Typs Pointer anlegen lassen - man muss die Grösse angeben. PChar, PInteger, einfach ein Zeiger auf einen Typen: ^typ = typirisierter Zeiger. Wenn man diesen nutzt weiss der Compiler wie gross die Daten sind auf die der Zeiger zeigt und kann daher u.a. mit einem einfachen New() genügend Speicher reservieren. Und nun sag mir was daran Quatsch ist und was es daran nicht geben sollte... MfG Muetze1 |
Re: untypisierter pointer
Hallo,
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz