有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

解决方案 »

  1.   

    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将指向一个不应该被访问的空间。
      

  2.   

    不要返回指针等变长类型,变长数据应该用参数返回,使用WINAPI定义,不要用_declspec,搂住对WINAPI接口不是很熟悉阿,你这么写的东西,别人用起来很麻烦。
      

  3.   

    double *p;
     p=xxx;
     return p;
    返回值位局部指针,好像不太好吧。
      

  4.   

    学习,我想C#来调用delphi的函数,不知道作起来难吗?