Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Pointer auf Klassenvariable, die übergeben wurde, zuweisen (https://www.delphipraxis.net/28799-pointer-auf-klassenvariable-die-uebergeben-wurde-zuweisen.html)

stefan2005 30. Aug 2004 14:15


Pointer auf Klassenvariable, die übergeben wurde, zuweisen
 
ich habe eine Klasse mit: (stark gekürzt)

TTest = class
X : Integer
[...]
end;

zwei Variablen (davon eine ein Pointer):

Var Test : TTest
TestPointer : ^Pointer;

und eine Procedure:

procedure Zuweisen(xx: TTest);
begin
TestPointer := @xx;
// hier funktioniert der Pointer noch (innerhalb der Procedure)
end;

Die Procedure rufe ich so auf:

[...]
Zuweisen(Test);
// ab hier funktioniert der Pointer nicht mehr !
[...]

Problem:
Die Pointerzuweisung funktioniert nicht richtig !
In der "procedure Zuweisen" kann ich zwar noch fehlerfrei mit dem Pointer und die Klasse zugreifen, aber wenn die Procedure beendet ist und der andere Qualltext fortgesetzt wird, treten Fehler oder falsche Werte auf !

Geht das nicht oder an was liegt es, warum ich keine Pointer auf eine Klasse zuweisen kann, die übergeben wurde ???

Leuselator 30. Aug 2004 14:21

Re: Pointer auf übergebene Klasse zuweisen
 
Delphi-Quellcode:
var
TestPointer : Pointer;
//TestPointer : ^Pointer; wäre ein Zeiger auf einen Zeiger
Dann:
Delphi-Quellcode:
procedure Zuweisen(xx: TTest);
begin
  TestPointer := @xx;
end;
Und später:
Delphi-Quellcode:
BlaBla...
if Assigned(TestPointer) //Enthält TestPointer gültige Adresse?
  then TTest(TestPointer).X := 5; // TypeCasting Zeiger als TTest-Objekt
                                  // und Eigenschaft X Wert zuweisen
Gruß

stefan2005 30. Aug 2004 15:14

Re: Pointer auf Klassenvariable, die übergeben wurde, zuweis
 
Danke :hello:

aber warum funktioniert das bei Strings dann nicht ?
also mit:

class TTest
X: String;
end;

und dann:

TTest(TestPointer).X := 'Hallo';

wenn ich dann mit "Label1.Caption := TTest(TestPointer).X;" lese, kommen so "komische" Zeichen !
bei Zahlen gehts einwandfrei !

paelesoft 30. Aug 2004 23:06

Re: Pointer auf Klassenvariable, die übergeben wurde, zuweis
 
Müsste die Procedure Zuweisen nicht so

Delphi-Quellcode:
procedure Zuweisen(var xx : TTest);
begin
  blah....
deklariert sein, da sonst doch IMHO nur der Pointer der lokalen Übergabevariablen "xx"
auf Testpointer geschrieben wird. (Die zudem nach Beendigung der Procedure freigegeben wird).
Wir wollen aber doch den Zeiger auf das Argument oder habe ich mich da getäuscht???


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:14 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