Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie krieg ich eine Referenz auf Array als Rückgabewert (https://www.delphipraxis.net/105294-wie-krieg-ich-eine-referenz-auf-array-als-rueckgabewert.html)

DelphiKlaus 19. Dez 2007 13:22

Re: Wie krieg ich eine Referenz auf Array als Rückgabewert
 
Hallo,

ich würd's so machen

Delphi-Quellcode:
type
  PMeinArray   = ^TMeinArray;
  TMeinArray   = Array [1..1000] of Irgendwas;

var
  MeinArray : PMeinArray;
  Loop     : Integer;

procedure HoleAdresse (MeinArray : PMeinArray);

begin
  MeinArray := @LokalesArray
end;

begin
  HoleAdresse (MeinArray);

  for Loop := 1 to 1000 do
    TuWasMitElement (MeinArray [Loop]^)
end.
So in etwa sollte es gehen

MfG

Klaus

sirius 19. Dez 2007 13:42

Re: Wie krieg ich eine Referenz auf Array als Rückgabewert
 
Schön ist es nicht, eine Pascal-Variante wäre besser. Aber wenn sich keine ergibt:
Delphi-Quellcode:
function TTest.getDatenArray:pointer;
//  EAX --> self
//  EDX --> Pointer auf Result

  function helpTypeInfo:pointer;
  type TFieldtype=array of Double; //entsprechend des Types DatenArray
                                   //besser wäre es gleich einen
                                   //einheitlichen Type zu nehmen
  begin
    result:=typeinfo(TFieldtype);
  end;
asm
    push ebx
    push edx
    push eax
    call helptypeinfo
    mov ebx,eax

    //Inhalt des Arrays (in Result) löschen
    mov eax,[esp+4]
    mov edx,ebx
    call system.@finalize

    //Wert von x an Result übergeben
    pop eax
    mov edx,[eax]+DatenArray
    mov eax,[esp]
    mov [eax],edx

    //Referenzzähler erhöhen
    push edx
    mov eax,esp
    mov edx,ebx
    call system.@addref

    pop eax
    pop eax
    pop ebx
end;
...
//Aufruf nur so:
var x:array of double;
begin
 ...
  x:=Test.getDatenArray;
end;

Edit: :gruebel: Generics Variante funktioniert doch super. Warum nimmst du nicht die?


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

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