![]() |
Array Programm übergreifend verarbeiten
Moin euch Delphianer :D
Habe mal eine Frage, bezüglich Statischer/Dynamischer Arrays zu einem Offenen Array übergeben werden muß. Die Verarbeide Funktion schaut wie folgt aus:
Delphi-Quellcode:
Diese Procedure liegt innerhalb einer eigenen unit, welche im Späteren Verlauf als API erweitert werden soll.
procedure StrResult(const Info: Array of String; Trenner: String; var Value: String);
Der Aufruf erfolgt hier:
Delphi-Quellcode:
Hier erhalte ich die Meldung:
procedure FTA(Row: Word);
var a: Byte; Info: Array[0..3] of String; begin Form2.LabeledEdit0.Text := PlanEdit.StringGrid1.Cells[a+1, Row]; Form2.ComboBox1.Text := PlanEdit.StringGrid1.Cells[a+1, Row]; for a:= 2 to 5 do begin info[a] := PlanEdit.StringGrid1.Cells[a+1, Row]; end; StrResult(Info, '#', Form2.LabeledEdit1.Text); end; Zitat:
Delphi-Quellcode:
erhalte ich die Meldung
procedure FTA(Row: Word);
var a: Byte; Info: Array of String; begin SetLength(Info, 4); Form2.LabeledEdit0.Text := PlanEdit.StringGrid1.Cells[a+1, Row]; Form2.ComboBox1.Text := PlanEdit.StringGrid1.Cells[a+1, Row]; for a:= 0 to 3 do begin info[a] := PlanEdit.StringGrid1.Cells[a+1, Row]; end; StrResult(Info, '#', Form2.LabeledEdit1.Text); end; Zitat:
Durch die Eigenschaft des Programmen bin ich auf die gewählen Typen (String) angewiesen. |
AW: Array Programm übergreifend verarbeiten
Du musst das Array typisieren.
|
AW: Array Programm übergreifend verarbeiten
Wenn du das Ganze später als API auslagern willst, solltest du auch bedenken, dass du (ohne Hilfsmittel) keine Strings an DLLs übergeben kannst. Besser wäre ein Array of P(Ansi/Wide)Char bzw. eine Liste mit PChar.
|
AW: Array Programm übergreifend verarbeiten
Zitat:
Delphi-Quellcode:
sollte doch eigendlich reichen?
Array of String;
Zitat:
Mein Systems kann keine DLL verarbeiten ^^ ergo muß ich SO nutzten. Die API wird wohl als eigenes Package laufen... |
AW: Array Programm übergreifend verarbeiten
Delphi-Quellcode:
und
Info: Array of String;
Delphi-Quellcode:
passt nicht zusammen. Am besten beide Arrays dynamisch deklarieren. So wie in Deinem zweiten Beispiel.
Info: Array[0..3] of String;
Zitat:
Delphi-Quellcode:
nimmst, sollte es gehen.
Info: Array of ShortString;
|
AW: Array Programm übergreifend verarbeiten
Zitat:
Delphi-Quellcode:
TStringArray = Array of String;
procedure Foo(Bar: TStringArray; var Output: TStringArray); |
AW: Array Programm übergreifend verarbeiten
Bei mir klappt das auch so:
Delphi-Quellcode:
Ich kann zwar nicht erkennen, wieso das plötzlich ShortStrings sein sollen, und die Indizes im Ausgangspost sind auch falsch belegt (2 bis 5 dürfte Probleme bereiten), aber an der fehlenden Typisierung sollte es nicht liegen. Ich hätte eher die Meldung erwartet, dass man keine Properties als Var-Parameter übergeben kann.
procedure ShowArrayElements(const Arr: array of string);
var i: integer; begin for i := Low(Arr) to High(Arr) do ShowMessage(Arr[i]); end; procedure TForm1.Button1Click(Sender: TObject); var Info: array[0..3] of string; DynInfo: array of string; begin Info[0] := 'Hallo'; Info[1] := 'Welt'; Info[2] := 'Hello'; Info[3] := 'World'; ShowArrayElements(Info); SetLength(DynInfo, 2); DynInfo[0] := 'Dideldum'; DynInfo[1] := 'Wuppdi'; ShowArrayElements(DynInfo); DynInfo := nil; end; |
AW: Array Programm übergreifend verarbeiten
Jupp, für OpenArray-Parameter gibt es im Delphi eine automatische Konvertierung "von" dynamischen oder statischen Arrays, in diesen Parameter.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 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