delphi调用vc的dll的问题
有c++dll文件一个,测试用的
extern "C "_declspec(dllexport) double *polyinterp(int lenx,int leny,double *xxx,double *yyy)
{
int i;
for(i=0;i <lenx;i++)
{
xxx[i]=i;
}
double *p;
p=xxx;
return p;
}
如何把p得到的连续内存空间,存放到一个Array of double里面
function polyinterp(lenx,leny:Integer;xxx,yyy:PDouble):PDouble;cdecl;external 'test1.dll ';
procedure TForm1.Button1Click(Sender: TObject);
var
arrayx,arrayy,arrayans:Array of double;
ans:PDouble;
lenx,leny,i,j,k:Integer;
begin
SetLength(arrayx,5);
SetLength(arrayy,5);
for i:=0 to 4 do
begin
arrayx[i]:=i;
end;
for j:=0 to 4 do
begin
arrayy[j]:=j;
end;
ans:=polyinterp(5,5,@arrayx[0],@arrayy[0]);
arrayans:=@ans;
setLength(arrayans,5);
for k:=0 to 4 do
showmessage(floattostr(arrayans[k]));
end;
这样不对,怎么样才能正确的得到,并输出0,1,2,3,4
[解决办法]
ans:=polyinterp(5,5,@arrayx[0],@arrayy[0]);
setLength(arrayans,5);
for k:= 0 to 4 do
begin
arrayans[k] := ans^;
showmessage(floattostr(arrayans[k]));
inc(ans);
end;
BTW, 个人认为polyinterp返回这个指针值的思路有些问题。
如果:
ans:=polyinterp(5,5,@arrayx[0],@arrayy[0]);
setLength(arrayx,0);
或者
ans:=polyinterp(5,5,@arrayx[0],@arrayy[0]);
arrayx := nil;
则,ans将指向一个不应该被访问的空间。