Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Rückgabe eines dynamischen Arrays aus DLL (https://www.delphipraxis.net/20806-rueckgabe-eines-dynamischen-arrays-aus-dll.html)

MatrixCrawler 23. Apr 2004 14:28


Rückgabe eines dynamischen Arrays aus DLL
 
Hallo Leute,

bin relativ neu in Delphi und habe folgendes Problem.

Ich möchte über eine Funktion in einer DLL ein dynamisches Array von integer-Werten erstellen und in mein Hauptprogramm zurückgeben.
Das Problem das ich habe ist allerdings, das alle Werte im Array 0 sind und ausserdem das Programm bei jedem aufrufen der Funktion ca 13MB mehr Umgebungsspeicher belegt.

Wenn ich dieselbe Funktion in das Hauptprogramm integriere habe ich allerdings keine Probleme.

Hier der DLL-Code

Delphi-Quellcode:
type
 TintegerArray = Array of Integer;

function rollPrivate(c:integer) : TintegerArray; stdcall;
var
 count         :integer;
 ergArray      :TintegerArray;
 temp,erg,t2    :integer;
begin
 SetLength(ergArray,c);

 for count := 1 to c do
 begin
  t2 := 0;
  erg := 1;
  temp := random(6)+1;
  erg := temp;

  while temp = 6 do
  begin
   t2 := random(6)+1;
   erg := erg+t2;
   temp := t2;
  end;

  ergArray[count-1] := erg;
 end;

 Result := ergArray;
end;

Und hier der Code aus dem Main-Programm

Delphi-Quellcode:
type
 TintegerArray = Array of Integer;

[...]

var
 tArray  :TIntegerArray;
 c       :integer;
begin
 ...
 else if diceOps.ItemIndex = 2 then
  begin
   mainForm.diceErg.Items.Clear;
   SetLength(tArray,diceCount.Value);
   tArray := rollPrivate(diceCount.Value);
   for c := 0 to diceCount.Value-1 do
    mainForm.diceErg.Items.Add(IntToStr(tArray[c]));
  end;

 diceForm.Close;
end;
Habe in beiden Codes die ShareMem-Unit als erstes deklariert....

Ich hofe ihr könnt mir helfen und ich habe mich nicht zu lächerlich gemacht :P

MatrixCrawler 24. Apr 2004 15:13

Re: Rückgabe eines dynamischen Arrays aus DLL
 
*bump*

Kann mir wirklich keiner helfen?

Robert Marquardt 24. Apr 2004 15:46

Re: Rückgabe eines dynamischen Arrays aus DLL
 
Das ist schlechter Stil.
Nimm einen var Parameter fuer das Array und setze die Groesse im Programm nicht in der DLL.
Die DLL fuellt nur aus. ShareMem ist dann dafuer nicht noetig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 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