AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie krieg ich eine Referenz auf Array als Rückgabewert
Thema durchsuchen
Ansicht
Themen-Optionen

Wie krieg ich eine Referenz auf Array als Rückgabewert

Ein Thema von Oracle · begonnen am 19. Dez 2007 · letzter Beitrag vom 19. Dez 2007
Antwort Antwort
Seite 2 von 2     12   
DelphiKlaus

Registriert seit: 18. Okt 2006
100 Beiträge
 
Delphi 6 Professional
 
#11

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

  Alt 19. Dez 2007, 14:22
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
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#12

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

  Alt 19. Dez 2007, 14:42
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: Generics Variante funktioniert doch super. Warum nimmst du nicht die?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 18:44 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