Hallo,
obwohl ich direkt keine LongStrings oder dynamische Arrays als Übergabeparameter von/zur DLL benutze, stürzt mein Programm ohne ShareMem zuverlässig nach Minuten ab.
Was wäre an folgender Konstruktion erlaubt, was nicht, und wie geht es besser, wenn ich kein ShareMem benutzen will ?
//***** Mainprogramm *****
procedure Main.Test (a: array of Integer; s: String);
begin
DLL_Test(@a[0], Length(a), PChar(s));
//Oder muss ich hier mit New Speicher besorgen und das Array kopieren?
end.
//***** DLL *****
type TaInt = array[0..1000] of Integer;
PaInt = ^TaInt;
var s: String;
a: array of Integer;
procedure DLL.Test (p: PaInt; lenWord; pc:PChar);
var i: Integer;
begin
SetLength(a, len);
MoveMem(@a[0], p, len * SizeOf(Integer));
oder: for i:= 0 to len - 1 do a[i]:= p^[i];
s:= pc;
end;
Danke pk
obwohl ich direkt keine LongStrings oder dynamische Arrays als Übergabeparameter von/zur DLL benutze, stürzt mein Programm ohne ShareMem zuverlässig nach Minuten ab.
Was wäre an folgender Konstruktion erlaubt, was nicht, und wie geht es besser, wenn ich kein ShareMem benutzen will ?
//***** Mainprogramm *****
procedure Main.Test (a: array of Integer; s: String);
begin
DLL_Test(@a[0], Length(a), PChar(s));
//Oder muss ich hier mit New Speicher besorgen und das Array kopieren?
end.
//***** DLL *****
type TaInt = array[0..1000] of Integer;
PaInt = ^TaInt;
var s: String;
a: array of Integer;
procedure DLL.Test (p: PaInt; lenWord; pc:PChar);
var i: Integer;
begin
SetLength(a, len);
MoveMem(@a[0], p, len * SizeOf(Integer));
oder: for i:= 0 to len - 1 do a[i]:= p^[i];
s:= pc;
end;
Danke pk
Comment