動作確認は Windows 7 U64(SP1) + Delphi XE5(UP2) Pro VCL-32 です.
DLL 内のの関数を使用するテスト用のコード
implementation
{$R *.dfm}
function test_conv(src:array of integer;
var dst1:array of single;
var dst2:array of single):boolean;stdcall;external 'dll_testarray.dll';
procedure TForm1.Button1Click(Sender: TObject);
var
ret : boolean;
src_dat : array[0..1000]of Integer;
dst1_dat : array[0..500]of Single;
dst2_dat : array[0..500]of Single;
LIndex : Integer;
begin
Memo1.Lines.Clear;
Memo1.Lines.BeginUpdate;
for LIndex := 0 to 1000 do src_dat[LIndex]:=1000 + LIndex;
ret:=test_conv(src_dat,dst1_dat,dst2_dat);
Memo1.Lines.Add(BoolToStr(ret));
for Lindex := Low(dst1_dat) to High(dst1_dat) do begin
Memo1.Lines.Add(FloatToStr(dst1_dat[LIndex]) + ' '
+ FloatToStr(dst2_dat[LIndex]));
end;
Memo1.Lines.EndUpdate;
end;
DLL のコード
library dll_testarray;
uses
System.SysUtils,
System.Classes;
function test_conv(src:array of integer;
var dst1:array of single;
var dst2:array of single):boolean; stdcall;
var
Lindex : Integer;
begin
Result := True;
for Lindex := Low(dst1) to High(dst1) do begin
dst1[Lindex] := src[Lindex];
dst2[Lindex] := src[Lindex] * 2;
end;
end;
int test_conv(
int src[1000],
float dst1[500],
float dst2[500]
);
は
int test_conv(
int *src,
float *dst1,
float *dst2
);
と同義ですから、これで解決というのは当たり前と言えば当たり前で…