Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi function mit pointer als Rückgabewert (https://www.delphipraxis.net/40740-function-mit-pointer-als-rueckgabewert.html)

Mr. No 20. Feb 2005 13:08


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:
uses meinObjekt, ...
type
  TMainForm = class(TForm)
  ...
private
  ...
public
  function GetMeinObjekt: TmeinObjekt;
  ...
end;

var
  MyObject: TmeinObjekt;

  function TMainForm.GetMeinObjekt: TmeinObjekt;
begin
  Result := MyObject;
end;
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?

Herzlichen Dank im Vorraus!!

Gruß
Mr. No

Phoenix 20. Feb 2005 13:10

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).

Phoenix 20. Feb 2005 13:12

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.

Mr. No 20. Feb 2005 13:13

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.

Phoenix 20. Feb 2005 13:14

Re: function mit pointer als Rückgabewert
 
Jupp. Sieht so aus ;-)

Mr. No 20. Feb 2005 13:17

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:
TMainForm(FOwner).GetMeinObjekt.eineMethode;
funktioniert nämlich nicht - der Parser meint, es sei keine solche Methode vorhanden

Mr. No 20. Feb 2005 13:19

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;

mirage228 20. Feb 2005 13:22

Re: function mit pointer als Rückgabewert
 
Hi,

das geht z.B. so

Delphi-Quellcode:
uses meinObjekt, ...
type
  TMainForm = class(TForm)
  ...
private
  FMyObject: TMeinObjekt;
public
  property MyObject: TMeinObjekt read FMyObject;
end;
mfG
mirage228

Phoenix 20. Feb 2005 13:22

Re: function mit pointer als Rückgabewert
 
Zitat:

Zitat von Mr. No
hm - kannst du mir dann noch sagen, wie ich auf das Objekt von außen Zugriff bekomme?

Delphi-Quellcode:
TMainForm(FOwner).GetMeinObjekt.eineMethode;
funktioniert nämlich nicht - der Parser meint, es sei keine solche Methode vorhanden

Seltsam.
Wenn eineMethode als Public deklariert wurde dann sollte das gehen.
Notfalls mit einem Typecast:
Delphi-Quellcode:
 (TMainForm(FOwner).GetMeinObjekt as TMeinObjekt).eineMethode;
Aber eigentlich sollte der nicht notwendig sein.

Phoenix 20. Feb 2005 13:24

Re: function mit pointer als Rückgabewert
 
Zitat:

Zitat von mirage228
Delphi-Quellcode:
  property MyObject: TMeinObjekt read FMyObject;

Uhh.
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 14:14 Uhr.
Seite 1 von 2  1 2      

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