Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Rückgabewert von Function freigeben (https://www.delphipraxis.net/41062-rueckgabewert-von-function-freigeben.html)

Oxmyx 25. Feb 2005 14:08

Re: Rückgabewert von Function freigeben
 
Eine Objektvariable ist aber bereits ein typisierter Zeiger!. Noch einmal mit einem Zeiger auf eine Objektvariable zu verweisen, ist schlicht Unsinn.

LoL 28. Feb 2005 10:35

Re: Rückgabewert von Function freigeben
 
also nochmal zurück ich habe das bisher immer noch nicht lösen könenen:
ich bräcuchte enventuell mal ne erklärung dazu:

Delphi-Quellcode:
var c1,c2 : TComponent;
    b : boolean;

function muh : TComponent;
begin
  result := nil;
  if b then
    result := c1
  else
    result := c2;
end;

procedure TForm1.Button1Click(Sender: TObject);
var cur : TComponent;
begin
  b := true;

  cur := muh;

  if @c1 <> @cur then showmessage('ungleich');
end;
warum ist wenn ich den button drück c1 und cur ungleich?

soweit ich das verstanden habe ist c1 doch auch nichts anderes als ein zeiger auf eine adresse oder? und cur bekommt dann den zeiger zugewiesen. warum sind die addressen dann unterschiedlich?

himitsu 28. Feb 2005 10:54

Re: Rückgabewert von Function freigeben
 
hmmm, versuch's mal so ... ich c1 un cur sind ja eingenständige Variablen, in denen die Pointer gespeichert werden, also haben @c1 und @cur auch immer unterschiedliche Adressen.

Delphi-Quellcode:
var c1,c2 : TComponent;
    b : boolean;

function muh : [color=#ff0000]Pointer[/color];
begin
  result := nil;
  if b then
    result := [color=#ff0000]@[/color]c1 
  else
    result := [color=#ff0000]@[/color]c2;
end;

procedure TForm1.Button1Click(Sender: TObject);
var cur : Pointer;
begin
  b := true;

  cur := muh;

  if @c1 <> cur then showmessage('ungleich');
end;
oder so
Delphi-Quellcode:
var c1,c2 : TComponent;
    b : boolean;

function muh : TComponent;
begin
  result := nil;
  if b then
    result := c1 
  else
    result := c2;
end;

procedure TForm1.Button1Click(Sender: TObject);
var cur : TComponent;
begin
  b := true;

  cur := muh;

  if c1 <> cur then showmessage('ungleich');
end;

LoL 28. Feb 2005 11:04

Re: Rückgabewert von Function freigeben
 
erstma danke für deine hilfe :thumb:

folgendes zu deinem ersten beispiel die zeiger sind jetzt gleich(zumindest die addressen).
dann müsste doch logischer weise wenn ich
Delphi-Quellcode:
  cur := TComponent.Create(form1);
auch c1 <> nil sein oder? ist es aber nicht! woran liegt das?

himitsu 28. Feb 2005 11:14

Re: Rückgabewert von Function freigeben
 
nee, beim 1. sind das ja die Zeiger auf die Variable (glaub ich), und da c1 und c2 immer nur auf vie Variable zeigen, sollte es dann wohl so aussehn.
Delphi-Quellcode:
if cur^ <> nil then ...

LoL 28. Feb 2005 11:19

Re: Rückgabewert von Function freigeben
 
kann ich denn die funktion so schreiben das mit dem rückgabe wert der funktion(also eine komponente) so arbeiten kann als ob es die ursprünglich variable wäre?

Delphi-Quellcode:
cur = muh;
cur := TComponent.Create;
cur.Free;
//usw.
dabei soll aber immer c1 bzw c2 verändert werden?

himitsu 28. Feb 2005 11:35

Re: Rückgabewert von Function freigeben
 
Klar, indem du es so machst, wie in deinem ersten Code,
Delphi-Quellcode:
function CurrentOL : TComponent;
begin
  if ... then result := EineKomponente
  else result := EineAndereKompoente;
end;
nur dann kannst du das ergebnis wiederum nicht direckt an ein andere Fumktion übergeben, welche einen Var-Parameter haben will (wie z.B. an FreeAndNil)

LoL 28. Feb 2005 11:48

Re: Rückgabewert von Function freigeben
 
ok

Delphi-Quellcode:
var c1,c2 : TComponent;
    b : boolean;

function CurrentOL : TComponent;
begin
  if b then result := c1
  else result := c2;
end;

procedure TForm1.Button1Click(Sender: TObject);
var cur : TComponent;
begin
  b := true;

  cur := CurrentOL;
  cur := TComponent.Create(form1);

  if c1 = nil then showmessage('nil');
end;
c1 ist aber hier nach immer noch nil! Woran kann das liegen?

PRehders 28. Feb 2005 11:59

Re: Rückgabewert von Function freigeben
 
Hallo LoL,

es ist doch klar, dass c1 = NIL ist: Du weist c1 nirgendwo einen Wert zu oder übergibt es als VAR-Parameter an eine Prozedur. Woher sollte denn ein Wert kommen?
Dadurch, dass du über deine Funktion c1 an cur zuweist, kommt ja keine interne Kopplung zustande, die bei der Zuweisung an cur (via Create) auch auf c1 "durchschlägt".

Bis dann

Peter

LoL 28. Feb 2005 12:39

Re: Rückgabewert von Function freigeben
 
aber wie kann ich das dann regeln das ich den wert der funktion verändere oder ist das nicht möglich?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:15 Uhr.
Seite 3 von 3     123   

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