DLL为什么使用完毕后会提示:内存访问错误呢?
DLL为什么使用完毕后会提示:内存访问错误呢? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061215160532289.html
自己写了个DLL,用delphi调用我自己DELPHI写的DLL,运行结果可以出来,但运行完毕后会提示内存访问错误。我第二次调用的时候就直接提示内存访问错误,无法运行。在程序中我使用了Record集合作为返回记录
uses
sharemem,
。。。。。。
var
。。。。。。
type
Tps = Record
sno: integer;
sname:string;
skt:string;
End;
Tp=array of Tps;
我的函数是
function sel(s:integer,var PResult:Tp):integer; export; stdcall;
begin
s:=0;
......
if (满足条件) then
begin
s:=s+1;
setlength(pResult,s);
PResult[s-1].sno:=某数据;
PResult[s-1].sname:=某数据;
PResult[s-1].stk:=某数据;
end;
end;
请兄弟们帮忙看看哪里有问题啊!
http://www.delphi2007.net/DelphiDB/html/delphi_20061215160532289.html
自己写了个DLL,用delphi调用我自己DELPHI写的DLL,运行结果可以出来,但运行完毕后会提示内存访问错误。我第二次调用的时候就直接提示内存访问错误,无法运行。在程序中我使用了Record集合作为返回记录
uses
sharemem,
。。。。。。
var
。。。。。。
type
Tps = Record
sno: integer;
sname:string;
skt:string;
End;
Tp=array of Tps;
我的函数是
function sel(s:integer,var PResult:Tp):integer; export; stdcall;
begin
s:=0;
......
if (满足条件) then
begin
s:=s+1;
setlength(pResult,s);
PResult[s-1].sno:=某数据;
PResult[s-1].sname:=某数据;
PResult[s-1].stk:=某数据;
end;
end;
请兄弟们帮忙看看哪里有问题啊!
把string类型换成shortstring
可能是其他代码的原因,用注释的方法或条件编绎逐块排除
我试了一下,就是换成PCHAR也还是不行的了,应该就是这段代码出的问题,因为没加这段代码前都是好好的,加了就有问题,我运行完毕后执行结果是有的,但会报内存错误。我第二次运行的时候居然连运行都不能运行就直接出错了。
1.没有string返回值,就不要用sharemem(sharemem有时会有问题,我也碰到过)
2.改string为string[250] //如果数据长度不超过250的话
或改为char[1000];
不要改为pchar,因为它要申请内存
用low high函数来访问记录数组
我一般在访问Dll时都用pchar操作,只是多写几个参数罢了,可以避免很多问题的。
Tp=array of Tps;
PTp = ^TP;
function sel(s:integer,var PResult:PTp):integer; export; stdcall;
Tp改用指针