首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi调用vc的dll的有关问题

2012-04-09 
delphi调用vc的dll的问题有c++dll文件一个,测试用的externC _declspec(dllexport)double*polyinterp(int

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

热点排行