AGB  ·  Datenschutz  ·  Impressum  







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

function mit pointer als Rückgabewert

Ein Thema von Mr. No · begonnen am 20. Feb 2005 · letzter Beitrag vom 20. Feb 2005
Antwort Antwort
Seite 1 von 2  1 2      
Mr. No

Registriert seit: 16. Feb 2005
36 Beiträge
 
#1

function mit pointer als Rückgabewert

  Alt 20. Feb 2005, 14:08
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
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#2

Re: function mit pointer als Rückgabewert

  Alt 20. Feb 2005, 14:10
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).
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#3

Re: function mit pointer als Rückgabewert

  Alt 20. Feb 2005, 14:12
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Mr. No

Registriert seit: 16. Feb 2005
36 Beiträge
 
#4

Re: function mit pointer als Rückgabewert

  Alt 20. Feb 2005, 14:13
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.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#5

Re: function mit pointer als Rückgabewert

  Alt 20. Feb 2005, 14:14
Jupp. Sieht so aus
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Mr. No

Registriert seit: 16. Feb 2005
36 Beiträge
 
#6

Re: function mit pointer als Rückgabewert

  Alt 20. Feb 2005, 14:17
hm - kannst du mir dann noch sagen, wie ich auf das Objekt von außen Zugriff bekomme?

TMainForm(FOwner).GetMeinObjekt.eineMethode; funktioniert nämlich nicht - der Parser meint, es sei keine solche Methode vorhanden
  Mit Zitat antworten Zitat
Mr. No

Registriert seit: 16. Feb 2005
36 Beiträge
 
#7

Re: function mit pointer als Rückgabewert

  Alt 20. Feb 2005, 14:19
oder gibt es eine Möglichkeit das Objekt gleich public zu definieren, so dass ich es von außen aufrufen kann?
etwa so:
TMainForm(FOwner).MyObject.eineMethode;
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#8

Re: function mit pointer als Rückgabewert

  Alt 20. Feb 2005, 14:22
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
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#9

Re: function mit pointer als Rückgabewert

  Alt 20. Feb 2005, 14:22
Zitat von Mr. No:
hm - kannst du mir dann noch sagen, wie ich auf das Objekt von außen Zugriff bekomme?

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:
 (TMainForm(FOwner).GetMeinObjekt as TMeinObjekt).eineMethode; Aber eigentlich sollte der nicht notwendig sein.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#10

Re: function mit pointer als Rückgabewert

  Alt 20. Feb 2005, 14:24
Zitat von mirage228:
  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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:47 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