Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array Parameter erwartet - Array nicht akzeptiert (https://www.delphipraxis.net/99461-array-parameter-erwartet-array-nicht-akzeptiert.html)

xZise 12. Sep 2007 14:30


Array Parameter erwartet - Array nicht akzeptiert
 
Hi DP,

Ich habe folgenden Code:
Delphi-Quellcode:
lRemoteVersion.Caption := Format('Remote Version: %d.%d.%d.%d', newVersion);
Wobei "newVersion" ein array ist (aus Words).
Allerdings meint er, dass es keine Funktion gäbe die man mit diesen Parametern aufrufen könnte.
Nun könnte ich "[newVersion[0]...]" schreiben, aber das ist doch unsinnig :)
Ich habe ein Array, er will ein array (of const) :)

Wie kann man also ein array bei Format übergeben ohne das array zu zerpflücken und ein anonymes array zu erstellen?

MfG
xZise

SirThornberry 12. Sep 2007 14:32

Re: Array Parameter erwartet - Array nicht akzeptiert
 
hast du ein dynamisches array oder ein statiches?

xZise 12. Sep 2007 14:41

Re: Array Parameter erwartet - Array nicht akzeptiert
 
Es ist ein statisches Array.

SirThornberry 12. Sep 2007 14:46

Re: Array Parameter erwartet - Array nicht akzeptiert
 
ich denke das Problem ist das eben ein Array of Const erwartet wird, du aber ein Array of Word übergibst. Wie man allerdings ein Array of Const definiert ist mir unklar.

xZise 12. Sep 2007 15:16

Re: Array Parameter erwartet - Array nicht akzeptiert
 
lol ^^
Sry, aber ich habe einfach ein bisschen rumgespielt und so funktionierts:
Delphi-Quellcode:
Versin[0] := 1;
Versin[1] := 5;
Versin[2] := 1;
Versin[3] := 0;
lVersion.Caption := Format('Version %d.%d.%d.%d', [@Version]);

xZise 15. Sep 2007 15:23

Re: Array Parameter erwartet - Array nicht akzeptiert
 
Hmm... scheint doch nicht zu funktionbieren?! Bin etwas verwirrt xD

SirThornberry 15. Sep 2007 15:47

Re: Array Parameter erwartet - Array nicht akzeptiert
 
verständlich das es nicht funktioniert denn du übergibst zwar ein Array aber nicht das Array "Versin" sondern ein Array mit einem Element welches ein Pointer ist.
Die Funktion scheint mit Compilermagic umgesetzt zu sein wodurch beliebig viele Parameter/Arrayelemente verschiedenster Typen erlaubt sind.

Es ist mit Delphimitteln nicht möglich ein Array of VerschiedeneTypen zu definieren. Selbst ein Array of Variant hätte nur den einen Typ Variant aber nicht mehrere verschiedene Typen. Das ist nur mit compilermagic möglich weil nur so beim compilieren erkannt werden kann welche Typen sich tatsächlich im Array befinden.

Dani 15. Sep 2007 16:53

Re: Array Parameter erwartet - Array nicht akzeptiert
 
Heyho!

Siehe Delphi-Referenz durchsuchenTVarRec und Delphi-Referenz durchsuchenVariante offene Array-Parameter

SirThornberry 15. Sep 2007 17:15

Re: Array Parameter erwartet - Array nicht akzeptiert
 
@XZise: Bevor du wie ich durch die suche wühlst: Du benötigst ein "Array of TVarRec". Ob Constant oder dynamich spielt wohl keine Rolle, der compiler nimmt beides (zumindest unter D7)

xZise 15. Sep 2007 17:39

Re: Array Parameter erwartet - Array nicht akzeptiert
 
Er nimmt beides, aber er gibt eine Fehlermeldung aus:
Zitat:

---------------------------
Devproject
---------------------------
Format '%d' ungültig oder nicht kompatibel mit Argument.
---------------------------
OK
---------------------------
so sieht der Code nun aus:
Delphi-Quellcode:
procedure TfrmUpdate.bbDownloadClick(Sender: TObject);
var
  fs : TFileStream;
  newVersion : array [0..3] of TVarRec;
begin
{...}
        newVersion[0].VInteger := ReadInteger('Version', 'Major', 0);
        newVersion[1].VInteger := ReadInteger('Version', 'Minor', 0);
        newVersion[2].VInteger := ReadInteger('Version', 'Release', 0);
        newVersion[3].VInteger := ReadInteger('Version', 'Build', 0);
        lRemoteVersion.Caption := Format('Remote Version: %d.%d.%d.%d', newVersion);
{...}
end;
Die Fehlermeldung wird bei "Format" (Wer hät's gedacht) ausgegeben.

[edit]Ich habs ^^ wenn ich auch noch newVersion[] die Eigenschaft VType := vtInteger zuweise klappts auch mit so :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:53 Uhr.
Seite 1 von 2  1 2      

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