![]() |
function mit pointer als Rückgabewert
hi,
ich habe in einer unit eine Instanz eines Objektes und möchte eine Zugriffsfunktion implementieren, die es erlaubt, von außen auf diese Instanz zuzugreifen. Ich möchte also eine Funktion schreiben, die einen Pointer auf dieses Objekt zurückgibt. Leider scheitere ich schon an der Funktionsdeklaration.
Delphi-Quellcode:
Das funktioniert soweit. Aber wie kann ich den Code jetzt derart modifizieren, dass er mir statt einer Kopie des Objektes einen Pointer auf das Objekt zurückgibt?
uses meinObjekt, ...
type TMainForm = class(TForm) ... private ... public function GetMeinObjekt: TmeinObjekt; ... end; var MyObject: TmeinObjekt; function TMainForm.GetMeinObjekt: TmeinObjekt; begin Result := MyObject; end; Herzlichen Dank im Vorraus!! Gruß Mr. No |
Re: function mit pointer als Rückgabewert
Hrm?
Du bekommst doch nur nen Pointer zurück. Eine Kopie müsstest Du selber manuell erzeugen (TMeinObject.Create... und dann dem neuen Objekt auch noch den gleichen Zustand verpassen wie das original). |
Re: function mit pointer als Rückgabewert
Nachtrag: Probier es einfach mal aus:
1.) Das Objekt erzeugen 2.) über GetMeinObject ein .Free ausführen und dann 3.) normal auf die Variable zugreifen. Du wirst sehen, das Du eine AccessViolation bekommst, da Du nicht eine Kopie sondern tatsächlich das richtige Objekt zerstört hast. |
Re: function mit pointer als Rückgabewert
oh - versteh ich das richtig, dass im Gegensatz zu C++ in Delphi call-by-reference und nicht call-by-value vorherschend ist?
das würde die Sache natürlich erheblich vereinfachen. |
Re: function mit pointer als Rückgabewert
Jupp. Sieht so aus ;-)
|
Re: function mit pointer als Rückgabewert
hm - kannst du mir dann noch sagen, wie ich auf das Objekt von außen Zugriff bekomme?
Delphi-Quellcode:
funktioniert nämlich nicht - der Parser meint, es sei keine solche Methode vorhanden
TMainForm(FOwner).GetMeinObjekt.eineMethode;
|
Re: function mit pointer als Rückgabewert
oder gibt es eine Möglichkeit das Objekt gleich public zu definieren, so dass ich es von außen aufrufen kann?
etwa so:
Delphi-Quellcode:
TMainForm(FOwner).MyObject.eineMethode;
|
Re: function mit pointer als Rückgabewert
Hi,
das geht z.B. so
Delphi-Quellcode:
mfG
uses meinObjekt, ...
type TMainForm = class(TForm) ... private FMyObject: TMeinObjekt; public property MyObject: TMeinObjekt read FMyObject; end; mirage228 |
Re: function mit pointer als Rückgabewert
Zitat:
Wenn eineMethode als Public deklariert wurde dann sollte das gehen. Notfalls mit einem Typecast:
Delphi-Quellcode:
Aber eigentlich sollte der nicht notwendig sein.
(TMainForm(FOwner).GetMeinObjekt as TMeinObjekt).eineMethode;
|
Re: function mit pointer als Rückgabewert
Zitat:
Dann aber gar nie nicht aus dem Property direkt auf die Variable zugreifen, sondern bitteschön immer über eine Get-Methode. Schliesslich kann es sein, das FMyObject gar nicht instanziert ist und dann knallt es ganz übel. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 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