Announcement

Collapse
No announcement yet.

Array als Parameter übergeben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Array als Parameter übergeben

    Wie übergebe ich ein Array als Referenz-Parameter an eine Prozedur? Wenn ich schreibe <p>
    procedure TForm1.Callother(var MyAr:array [1..5] of Char);
    dann streikt der Compiler.
    (*Er streikt auch bei:
    procedure TForm1.Callother(MyAr:array[1..5] of Char);*)
    Wenn ich schreibe <p>
    procedure TForm1.Callother(var MyAr:array of Char);<p>
    dann läßt der Compiler das durchgehen, schickt mir aber zur Laufzeit eine Zugriffsverletzung, nachdem ich die Einzelwerte geändert habe. Beispiel:<pre>
    procedure TForm1.Button1Click(Sender: TObject);
    var MyAr: array[1..5] of Char;
    begin
    MyAr[1]:='H';
    MyAr[2]:='a';
    MyAr[3]:='n';
    MyAr[4]:='s';
    MyAr[5]:='i';
    Label1.Caption:=MyAr;
    Callother(MyAr);
    end;

    procedure TForm1.Callother(var aText:array of Char);
    var i:integer;
    begin
    aText[1]:='M';
    aText[2]:='a';
    aText[3]:='u';
    aText[4]:='s';
    aText[5]:='i';
    end;</pre>

  • #2
    Hallo Gerhard,
    <pre><b>
    type
    TMyArrayofChar = array[1..5] of Char;
    <p>
    TForm1 = Class(TForm)
    ...
    procedure CallOther(var aText: TMyArrayOfChar);
    private
    ...
    end;
    <p>
    procedure TForm1.Button1Click(Sender: TObject);
    var
    MyAr: TMyArrayOfChar;
    begin
    MyAr[1]:='H';
    MyAr[2]:='a';
    MyAr[3]:='n';
    MyAr[4]:='s';
    MyAr[5]:='i';
    Label1.Caption:=MyAr;
    Callother(MyAr);
    end;
    <p>
    procedure TForm1.Callother(var aText: TMyArrayOfChar);
    var
    i:integer;
    begin
    aText[1]:='M';
    aText[2]:='a';
    aText[3]:='u';
    aText[4]:='s';
    aText[5]:='i';
    end;
    </pre></b>

    Tschüß

    Torste

    Comment


    • #3
      Hallo Torsten,
      sehe ich das richtig, dass ohne eine globale Deklaration keine Übergabe möglich ist

      Comment


      • #4
        Hallo Gerhard,

        möglich ist viel. Allerdings kann dann der Delphi-Compiler keine Typüberprüfung mehr durchführen und die Gefahr von schwer zu entdeckenden Programmierfehlern nimmt entsprechend zu.

        Letzlich wird an die Prozedure ja nur ein Pointer als Parameter übergeben. Wie man dann mit diesem Pointer umgeht ist einem selbst überlassen.

        Tschüß

        Torste

        Comment

        Working...
        X