![]() |
Rückgabewert Referenzieren
Hallihallo :hi:
Man kann ja die Übergabeparameter einer Methode mit "var" definieren, um sie nur zu referenzieren:
Delphi-Quellcode:
procedure Tester(a: Integer; var b: Integer);
Mein Ziel ist es den Rückgabewert einer Funktion referenziert zurückgeben... Ist dies überhaupt möglich? Ich weiss, es ist natürlich möglich der Rückgabewert auch als Übergabewert zu definiere, aber ich würde die ander Lösung bevorzugen... |
Re: Rückgabewert Referenzieren
In dem Fall müsstest du einen Pointer zurückgeben.
Delphi-Quellcode:
Wobei Foobar dann keine lokale Variable der Funktion sein darf, da sie nach Verlassen der Function nicht mehr existiert.
function (foo: TBar): PInteger;
begin result := @Foobar; end; |
Re: Rückgabewert Referenzieren
jo das mit der lokalen Variable ist klar...
danke |
Re: Rückgabewert Referenzieren
Bei nicht elementaren Typen wird übrigens immer nur eine Referenz zurückgegeben, so dass man da nicht zusätzlich mit Pointern hantieren muss. Ausgenommen davon sind aber Delphi-Strings, und ich glaube auch Records und statische Arrays - diese werden ohne Handarbeit ByValue übergeben. Edit: Bei statischen Arrays aber dann auch nur lokale wenn ich mich nicht irre, für die es ja auch Sinn macht. 100%ig sicher bin ich allerdings nicht, wie es für alle möglichen Fälle im einzelnen aussieht.
(Das aber nur der Vollständigkeit halbar :)) |
Re: Rückgabewert Referenzieren
Wenn man sich einmal fragt was bei Verwendung von Var, Out etc. passiert liegt die Lösung auf der Hand (wurde auch bereits gepostet). Ein by-Reference übergebener Wert ist nichts anderes als das ein Pointer auf den Wert übergeben wird.
Hast du also beispielsweise eine Funktion in einer DLL welche einen Var-parameter erwartet kannst du die Funktion außerhalb auch mit einem Pointerparameter definieren. Und Rückgabewerte von Funktionen können natürlich auch Pointer-Typen sein :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:52 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-2025 by Thomas Breitkreuz