![]() |
AW: Addresse eines var Parameters ermitteln
Klar sollte Assigned natürlich auf NIL (C-isch als NULL) prüfen kommen. :gruebel:
Oder meinst das Variant-NULL? Assigned macht ja auch nur <>nil. Einzige Ausnahme sind Methoden-Zeiger, wo es zwei nil gibt. Und was ist denn nun null? * der Inhalt der Variable * oder haben sie bösartig die Adresse zur Variable gelöscht? Letzteres dürfte dir aber egal sein, da es außerhalb keine Wirkung hat und die veränderte Adresse des VAR-Parameters nur innerhalb deren Funktion besteht. (die wird ja quasi dennoch als CONST und None-Reference übergeben ... außer du hast einen Zeiger auf einen Zeiger auf die eigentliche Speicherstelle :stupid:) |
AW: Addresse eines var Parameters ermitteln
Hallo,
danke für die Antworten. Das einfache
Delphi-Quellcode:
compiliert und sollte es tun.
if not (@MyParam = nil) then
Grüße TurboMagic |
AW: Addresse eines var Parameters ermitteln
Die haben als Parameter eine NIL Adresse übergeben.
Damit muss es knallen, wenn ich drauf schreibe. |
AW: Addresse eines var Parameters ermitteln
Ach du bekommst die Adresse.
Klang so, als gibst du denen den Parameter (so callback-mäßig) und der irgendwie als NIL zurück kommt. Ja, in Delphi ist es etwas "umständlich", wenn man einem VAR-Parameter ein NIL reingeben will. (bei denen wurde es dann wohl einfach als Pointer deklariert)
Delphi-Quellcode:
// entspricht einem procedure Test(A, B: PInteger);
procedure Test(var A: Integer; B: PInteger); begin if not Assigned(B) then Beep; if not Assigned(@A) then Beep; end; procedure TForm25.FormCreate(Sender: TObject); var X: PInteger; begin X := nil; Test(X^, nil); Test(PInteger(nil)^, nil); end; tja, Optional geht dann wohl nur
Delphi-Quellcode:
procedure Test(A: PInteger=nil);
// oder procedure Test(); overload; procedure Test(var A: Integer); overload; Ich glaub Emba sagt dazu
Delphi-Quellcode:
,
procedure Test(var [optional] A: Integer);
Delphi-Quellcode:
oder eigentlich eher (aber Vorhergehendes wäre besser)
procedure Test(var A: Integer=0);
Delphi-Quellcode:
bestimmt nein. :roll:
procedure Test(var A: Integer=nil);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:54 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