![]() |
Inhalt von untypisierter Parametern
Ich arbeite gerade an einigen Methoden, die untypisierte Parameter benutzen und auch benutzen sollen. Jedoch gab es dabei einige Probleme; der Code wollte einfach nicht funktionieren.
Aus diesem Grund habe ich einfach mal eine kleine Prozedur mit untypisiertem Paramter genommen, um diese zu testen. :witch:
Delphi-Quellcode:
Wie man sieht über gebe ich der Prozedur Test ein Array von Integern mit der Länge zwei.
procedure Test(var Source);
var pI : ^Integer; begin pI := @Source; ShowMessage(IntToStr(pI^)); inc(pI); ShowMessage(IntToStr(pI^)); end; procedure TForm1.Button1Click(Sender: TObject); var i : array of Integer; begin SetLength(i,2); i[0] := 4; i[1] := 4; Test(i); end; Um zu testen, ob es in der Prozedur Test auch korrekt ankommt, gebe ich dort den Inhalt des Arrays aus. Natürlich habe ich erwartet, dass jetzt zweimal die 4 ausgegeben wird. Das passiert aber nicht ! :wall: Warum ? :wiejetzt: overmoon |
Re: Inhalt von untypisierter Parametern
Hi,
ich bin mir nicht sicher, aber nimm statt var mal const. AFAIK ist var sowas wie out unter C++ (also wird darin nur was rausgegeben und nicht gelesen). Chris |
Re: Inhalt von untypisierter Parametern
Ich habe das Problem gerade selbst gelöst. :dancer:
Delphi-Quellcode:
Bei variablen Arrays wird anscheinend nur ein Pointer auf das erste Element des variablen Arrays übergeben.
procedure Test(var Source);
var pI : ^Integer; begin pI := @Source; pI := Ptr(pI^); ShowMessage(IntToStr(PI^)); inc(PI); ShowMessage(IntToStr(PI^)); end; procedure TForm1.Button1Click(Sender: TObject); var i : array of Integer; begin SetLength(i,2); i[0] := 4; i[1] := 4; Test(i); end; Das ist aber sehr ärgerlich !! :evil: Denn bei normalen Arrays funktioniert die Version von oben:
Delphi-Quellcode:
Das heißt, dass ich für normale statische Arrays und für variable Arrays je eine eigene Prozedur schreiben muss, bzw. mir übergeben lassen muss, was übergeben worden ist (statisch, variabel). :wall:
procedure Test(var Source);
var pI : ^Integer; begin pI := @Source; ShowMessage(IntToStr(pI^)); inc(pI); ShowMessage(IntToStr(pI^)); end; procedure TForm1.Button1Click(Sender: TObject); var i : array[0..1] of Integer; begin i[0] := 4; i[1] := 4; Test(i); end; Oder kann man das irgendwie herausfinden ?? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:37 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