Jeg har konverteret en header for en dll fil skrevet i c++ til delphi. Det er også gået ok, men mit problem er, at mit program kun virker en gang i mellem selvom jeg kører det med samme parametre hver gang. Jeg tror, det er pga., at jeg skal "pointe" til den første post i et array som dll filen skal bruge. Arrayet bliver sikkert gemt på forskellige måder/steder i hukommelsen fra gang til gang og derfor går det nogle gange galt. Giver det nogen mening?? - og hvis det gør - kan jeg så på en eller anden måde sikre mig, at arrayet altid bliver gemt på en passende "pæn" måde i hukommelsen??
Mit array er bare et 1 dim array: buffer: array [a..b] of word;
Jeg har prøvet at lege lidt med at sende en array over til et dll som tager parametrene med StdCall. Det bliver aldrig 100% som din problemopstilling men måske er der noget du kan bruge:
// Det kaldende program (med header)
type TfrmMain = class(TForm) btnTest: TButton; lbData: TListBox; procedure btnTestClick(Sender: TObject); procedure FormCreate(Sender: TObject); private fArray : array of word; public end;
var frmMain: TfrmMain;
// Får hele smøren hvad "efternavne" angår. function Inc100(var aArray : array of word; aCount : integer) : integer; stdcall; external 'dlltest.dll' name 'Inc100';
implementation
{$R *.dfm}
procedure TfrmMain.FormCreate(Sender: TObject); var i : integer; begin Setlength(fArray,100); for i := 0 to 99 do fArray[i] := i; end;
procedure TfrmMain.btnTestClick(Sender: TObject); var i : integer; begin Inc100(fArray,100);
for i := low(fArray) to high(fArray) do lbData.Items.Add(IntToStr(fArray[i])); end;
Den fantastiske DLL-fil:
library DLLTest;
uses SysUtils, Classes;
{$R *.res}
function Inc100(var aArray : array of word; aCount : integer) : integer; stdcall; var i : integer; begin try for i := 0 to aCount - 1 do aArray[i] := aArray[i] + 100; result := 1 except result := 0; end; end;
Ja, jeg har husket stdcall... men mange tak for dit eksempel - måske kan jeg bruge det til at blive inspireret til at ændre i min header, men desværre har jeg først mulighed for at kigge på det på mandag (i morgen) - men jeg vender tilbage, når jeg har fået set noget mere på det :-)
Ja, det kunne det være, men jeg har desværre ikke kildekoden til dll'en, da jeg ikke selv har skrevet den... så jeg håber på, at det ikke er der, fejlen ligger...
Nå, nu har jeg fået det til at virke - det hjalp med lidt inspiration og lidt "roden rundt"... du kan bare lave et svar hrc, så vil jeg gerne give dig pointene...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.