AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Array Programm übergreifend verarbeiten
Thema durchsuchen
Ansicht
Themen-Optionen

Array Programm übergreifend verarbeiten

Ein Thema von Maik81NF · begonnen am 22. Mär 2014 · letzter Beitrag vom 23. Mär 2014
Antwort Antwort
Maik81NF

Registriert seit: 22. Mär 2014
2 Beiträge
 
#1

Array Programm übergreifend verarbeiten

  Alt 22. Mär 2014, 11:09
Moin euch Delphianer

Habe mal eine Frage, bezüglich Statischer/Dynamischer Arrays zu einem Offenen Array übergeben werden muß.

Die Verarbeide Funktion schaut wie folgt aus:
procedure StrResult(const Info: Array of String; Trenner: String; var Value: String); Diese Procedure liegt innerhalb einer eigenen unit, welche im Späteren Verlauf als API erweitert werden soll.

Der Aufruf erfolgt hier:
Delphi-Quellcode:
  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;
Hier erhalte ich die Meldung:
Zitat von Lazarus:
edit.pas(59,19) Error: Incompatible type for arg no. 1: Got "Array[0..4] Of ShortString", expected "Open Array Of AnsiString"
umgeschrieben auf ein Dynamisches Array
Delphi-Quellcode:
  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;
erhalte ich die Meldung
Zitat von Lazarus:
edit.pas(60,19) Error: Incompatible type for arg no. 1: Got "Dynamic Array Of ShortString", expected "Open Array Of AnsiString"
Hat von euch jemand einen Idee, wie ich das lösen kann, Ohne eine Funktion mit bis zu 50 Variablen schreiben zu müßen?
Durch die Eigenschaft des Programmen bin ich auf die gewählen Typen (String) angewiesen.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Array Programm übergreifend verarbeiten

  Alt 22. Mär 2014, 11:15
Du musst das Array typisieren.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Array Programm übergreifend verarbeiten

  Alt 22. Mär 2014, 12:11
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.
  Mit Zitat antworten Zitat
Maik81NF

Registriert seit: 22. Mär 2014
2 Beiträge
 
#4

AW: Array Programm übergreifend verarbeiten

  Alt 23. Mär 2014, 11:12
Du musst das Array typisieren.
Hmmm, Array of String; sollte doch eigendlich reichen?

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.
Danke schon mal für wie Vorabinfo... nur bekomm ich dabei schon mal das Problem, das ich keine "DLL" verwende.
Mein Systems kann keine DLL verarbeiten ^^ ergo muß ich SO nutzten. Die API wird wohl als eigenes Package laufen...
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Array Programm übergreifend verarbeiten

  Alt 23. Mär 2014, 12:11
Info: Array of String; und Info: Array[0..3] of String; passt nicht zusammen. Am besten beide Arrays dynamisch deklarieren. So wie in Deinem zweiten Beispiel.

Zitat von Lazarus:
edit.pas(60,19) Error: Incompatible type for arg no. 1: Got "Dynamic Array Of ShortString", expected "Open Array Of AnsiString"
bedeutet, das Du ein Array mit ShortStrings übergibst wo ein Array mit AnsiStrings erwartet wird. Wenn Du Info: Array of ShortString; nimmst, sollte es gehen.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof

Geändert von Garfield (23. Mär 2014 um 12:14 Uhr)
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Array Programm übergreifend verarbeiten

  Alt 23. Mär 2014, 15:24
Hmmm, Array of String; sollte doch eigendlich reichen?
So meint er es:
Delphi-Quellcode:
TStringArray = Array of String;
procedure Foo(Bar: TStringArray; var Output: TStringArray);
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#7

AW: Array Programm übergreifend verarbeiten

  Alt 23. Mär 2014, 16:11
Bei mir klappt das auch so:
Delphi-Quellcode:
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;
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Array Programm übergreifend verarbeiten

  Alt 23. Mär 2014, 17:15
Jupp, für OpenArray-Parameter gibt es im Delphi eine automatische Konvertierung "von" dynamischen oder statischen Arrays, in diesen Parameter.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz