![]() |
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:
Habe in beiden Codes die ShareMem-Unit als erstes deklariert....
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; Ich hofe ihr könnt mir helfen und ich habe mich nicht zu lächerlich gemacht :P |
Re: Rückgabe eines dynamischen Arrays aus DLL
*bump*
Kann mir wirklich keiner helfen? |
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 12:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz