冷
冷涯
Unregistered / Unconfirmed
GUEST, unregistred user!
问题描述如下:
我有一个DLL,里边有一个函数是这样声明的
function SetSaveIPfee(const IPfeebillchar; var flag:Integer)char; stdcall;
我在另一个程序中调用该DLL的函数,但结果老是读不出来,然后就报异常,是一个内存地址的访问错误,出错部分代码如下:
datainfo : Pchar;
ls_rtn : String;
try
// GetMem(datainfo,512);
datainfo := SetSaveIPfee(IPfeebill,aflag);
// Application.MessageBox(pchar(inttostr(StrLen(datainfo))),'');
ls_rtn := datainfo;//就是老在这一句报错
// FreeMem(datainfo);
If aflag >= 0 Then
ls_rtn := '';
except
on E:Exception Do
begin
ls_rtn := E.Message;
end;
end;
这部分代码是写在一个函数中实现的,在循环调用该函数时,要不就是1,3,5,7..次出错,要不就是2,4,6,8..次出错,这个基本上跟DLL的静态调用和动态调用方法有关.但我始终搞不明白的就是去年写的一些测试程序,不管是动态调用还是静态调用,代码一模一样,一点问题都没有.起初我怀疑可能是变量名字冲突,就是同一个变量名到处声名造成的内存地址不对劲儿,或者是PCHAR型变量的大小有限制等等,但试了N种办法就是解决不了,请大家帮我看看,我快急死了.
我有一个DLL,里边有一个函数是这样声明的
function SetSaveIPfee(const IPfeebillchar; var flag:Integer)char; stdcall;
我在另一个程序中调用该DLL的函数,但结果老是读不出来,然后就报异常,是一个内存地址的访问错误,出错部分代码如下:
datainfo : Pchar;
ls_rtn : String;
try
// GetMem(datainfo,512);
datainfo := SetSaveIPfee(IPfeebill,aflag);
// Application.MessageBox(pchar(inttostr(StrLen(datainfo))),'');
ls_rtn := datainfo;//就是老在这一句报错
// FreeMem(datainfo);
If aflag >= 0 Then
ls_rtn := '';
except
on E:Exception Do
begin
ls_rtn := E.Message;
end;
end;
这部分代码是写在一个函数中实现的,在循环调用该函数时,要不就是1,3,5,7..次出错,要不就是2,4,6,8..次出错,这个基本上跟DLL的静态调用和动态调用方法有关.但我始终搞不明白的就是去年写的一些测试程序,不管是动态调用还是静态调用,代码一模一样,一点问题都没有.起初我怀疑可能是变量名字冲突,就是同一个变量名到处声名造成的内存地址不对劲儿,或者是PCHAR型变量的大小有限制等等,但试了N种办法就是解决不了,请大家帮我看看,我快急死了.