Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Verschiedene Arrays als Parameter unterscheiden (https://www.delphipraxis.net/31683-verschiedene-arrays-als-parameter-unterscheiden.html)

dizzy 12. Okt 2004 17:12


Verschiedene Arrays als Parameter unterscheiden
 
Mahlzeit miteinander.
Folgender Code vorweg:
Delphi-Quellcode:
type
  TFFTData512   = array[0..512] of Double;
  TFFTData1024  = array[0..1024] of Double;
  TFFTData2048  = array[0..2048] of Double;
  TFFTData4096  = array[0..4096] of Double;
  TWaveData512  = array[0..512] of SmallInt;
  TWaveData1024 = array[0..1024] of SmallInt;
  TWaveData2048 = array[0..2048] of SmallInt;
  TWaveData4096 = array[0..4096] of SmallInt;
Diese Array-Typen hab ich, und möchte sie als Übergabeparameter an eine Prozedur haben. So weit kein Problem:
Delphi-Quellcode:
procedure getData(out data);
Aaaaber: Ich möchte jetzt innerhalb der Prozedur wissen, mit welchem der o.g. Typen ich es nun zu tun habe! Der is-Operator klappt nicht, da es sich ja nicht um Objekte handelt, und auch "TypeOf()" verweigert aus selbigem Grunde den Dienst.

Wüsste da jemand wie ich an diese Infos heran komme?

Danke schomma!
Fabian

omata 12. Okt 2004 20:24

Re: Verschiedene Arrays als Parameter unterscheiden
 
Moin,

intern brauchst du zwei Prozeduren, nach aussen sieht es dann aber so aus, als ob du nur eine Prozedur hast...

Delphi-Quellcode:
type
  TFFTData512   = array[0..512] of Double;
  TFFTData1024  = array[0..1024] of Double;
  TFFTData2048  = array[0..2048] of Double;
  TFFTData4096  = array[0..4096] of Double;
  TWaveData512  = array[0..512] of SmallInt;
  TWaveData1024 = array[0..1024] of SmallInt;
  TWaveData2048 = array[0..2048] of SmallInt;
  TWaveData4096 = array[0..4096] of SmallInt;
  :
  :
  private
    procedure getData(data:array of double); overload;
    procedure getData(data:array of SmallInt); overload;
  public
  :
  :
procedure TForm.getData(data:array of double);
begin
  case sizeof(data) of
    sizeof(TFFTData512): showmessage('TFFTData512');
    sizeof(TFFTData1024): showmessage('TFFTData1024');
    sizeof(TFFTData2048): showmessage('TFFTData2048');
    sizeof(TFFTData4096): showmessage('TFFTData4096');
  end;
end;

procedure TForm.getData(data: array of SmallInt);
begin
  case sizeof(data) of
    sizeof(TWaveData512): showmessage('TWaveData512');
    sizeof(TWaveData1024): showmessage('TWaveData1024');
    sizeof(TWaveData2048): showmessage('TWaveData2048');
    sizeof(TWaveData4096): showmessage('TWaveData4096');
  end;
end;
und der Aufruf...

Delphi-Quellcode:
procedure TForm.ButtonClick(Sender: TObject);
var a1:TFFTData512;
    b1:TFFTData1024;
    c1:TFFTData2048;
    d1:TFFTData4096;
    a2:TWaveData512;
    b2:TWaveData1024;
    c2:TWaveData2048;
    d2:TWaveData4096;
begin
  getData(a1);
  getData(b1);
  getData(c1);
  getData(d1);
  getData(a2);
  getData(b2);
  getData(c2);
  getData(d2);
end;
vielleicht hilft es dir ja...

MfG
Thorsten

dizzy 13. Okt 2004 00:11

Re: Verschiedene Arrays als Parameter unterscheiden
 
Bist'n Schatz! :love:

Da hätt' man drauf kommen können...


Dankee!

Muetze1 13. Okt 2004 10:01

Re: Verschiedene Arrays als Parameter unterscheiden
 
Moin!

Ich bezweifle das SizeOf(Data) funktioniert, da er dort IMHO nur eine 4 zurück liefern sollte bei allen 4 Typen. Daher könnte man es dort doch einfach mit High() oder Length() unterscheiden anhand der unterschiedlichen Array Längen (wie in dem Beispiel auch).

MfG
Muetze1

dizzy 13. Okt 2004 15:18

Re: Verschiedene Arrays als Parameter unterscheiden
 
Japp, mit High() ists richtig. Hatte ich auch so bei mir eingebaut. SizeOf() liefert natürlich immer nur 4, da es ja nur'n Pointer ist.

Aber gut dass du das nochmal ansprichst, falls jemand für selbiges Problem eine Lösung sucht!


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 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 by Thomas Breitkreuz