Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Beliebig viele Parameter bei Procedure oder Function


Jakob Schöttl - Fr 26.10.07 15:41
Titel: Beliebig viele Parameter bei Procedure oder Function
Hallo,

in C++ ist es ja möglich eine Funktion zu definieren, der man beliebig viele Parameter gleichen Typs mitgeben kann.

Oder auch bei Delphi die Procedure Write().

Wie deklariere ich bei Delphi so eine Funktion?

Ich hoffe ihr könnt mir helfen, das wäre nähmlich grade echt praktisch.


mkinzler - Fr 26.10.07 15:46

Jein. man kann zwar keine Prozeduren/Funktionen mit variabler anzahl Parameter schreiben, man kann Parameter aber mit Defaultwerten belegen, dann muss man diese beim Aufruf nicht übergeben.


Jakob_Ullmann - Fr 26.10.07 15:49

Hoffe ich habe deine Frage richtig verstanden. Eigentlich sieht das so aus:

Delphi-Quelltext
1:
procedure proc_name(Parameter1, Parameter2, ParameterX: Integer);                    

Hoffe, ich konnte helfen.


Jakob Schöttl - Fr 26.10.07 15:51

ok, dann gebe ich mal vllt 10 Parameter mit Default-Werten an, oder ich mach ein Array...

Bisschen schade, weißt du wieso das dann bei dieser Write-Procedure geht? Wahrscheinlich ist die sozusagen eingebaut.


Jakob Schöttl - Fr 26.10.07 15:56

user profile iconJakob_Ullmann hat folgendes geschrieben:
Hoffe ich habe deine Frage richtig verstanden. Eigentlich sieht das so aus:

Delphi-Quelltext
1:
procedure proc_name(Parameter1, Parameter2, ParameterX: Integer);                    

Hoffe, ich konnte helfen.

nein, ich meinte eben dass man, wenn die Procedure schon deklariert und implementiert und fertig ist, beliebig viele Parameter beim Aufruf angeben kann, ohne alle (zb) 100 in der Deklaration geschrieben zu haben.

Bei C++ sieht das glaub ich so aus, und dann kann man mit Hilfe von Makros mit den Parametern arbeiten:

C#-Quelltext
1:
int func(int anzahl, ...) ;                    


Delete - Fr 26.10.07 16:02

Guck dir mal const Args: array of const an, wie es von der Funktion Format verwendet wird.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure Foobar(args: array of const);
begin
  ShowMessage(IntToStr(Length(args)));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Foobar(['Test1''Test2'42]);
end;


Narses - Fr 26.10.07 16:10

Moin!

user profile iconalzaimar hat hier [http://www.delphi-forum.de/viewtopic.php?p=467363#467363] vor Kurzem eine Demo dazu gepostet. :idea:

cu
Narses


BenBE - Sa 27.10.07 21:37

Alternativ kann man nen kleinen Hack machen, der allerdings nen C-Compiler erfordert:

Man schreibt die besagte Funktion in C und nutzt hierbei als Aufruf-Konvention __cdecl. In Delphi bindet man nun die Object-File von C mit {$O function.obj} ein und deklariert die besagte Funktion als externalcdeclvarargs;. Ist zwar nicht sauber, geht aber :P


Jakob Schöttl - So 28.10.07 11:59

ah, das array of const ist super, danke!