有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
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
解决方案 »
- 急求delphi 基于xmodem协议的通讯
- 关于dbgrid控件的问题!
- OleContainer清空的问题
- 如何取图象的真实大小?
- 请问quickrep 中如何把报表在同一页上 上下打印两遍?
- 急!delphi怎样处理数据库输入重复数据问题?
- 如何实现动态添加com接口?
- VCL的类库中是否有正则表达式这样的东东?
- listbox的问题
- 请问IdTelnet 组件如何实现 真正的telnet 终端操作
- 怎么样才能让 insert 的记录 在数据库中保存的 位置 跟插入位置一样
- 在使用setPriorityClass()函数时,编译时提示ABOVE_NORMAL_PRIORITY_CLASS和BELOW_NORMAL_PRIORITY_CLASS未定义?
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将指向一个不应该被访问的空间。
p=xxx;
return p;
返回值位局部指针,好像不太好吧。