俺的程序要调用别人提供的一个DLL,现在的问题是,一摸一样的程序,别人提供的例程就很正常,俺的程序调用就巨慢无比,例程5秒钟就能出来,俺要5分钟晕厥了......
Function getkk(var p1,p2:pchar; var r1:real):real;stdcall;external 'phfhud.DLL' name 'getkk';
......
procedure Tfrm_form1.btn1Click(Sender: TObject);
var
p1,p2:pchar;
tmp,r1:real;
begin
tmp:=getkk(p1,p2,r1);
if tmp=0 then showmessage('成功 '+p1+' '+p2+' '+floattostr(r1));
end;这段程序是直接从例程源码中复制过来的
也不是每次都慢,比如点btn1第一次5秒,第二次5秒,第三次以后就5分钟这样
但是别人的例程连点10次就是正常的,程序完全一模一样啊俺知道这问题很抽象,,只想求教大侠们,若是你们遇到这种情况,会从何入手?俺已经晕菜了
Function getkk(var p1,p2:pchar; var r1:real):real;stdcall;external 'phfhud.DLL' name 'getkk';
......
procedure Tfrm_form1.btn1Click(Sender: TObject);
var
p1,p2:pchar;
tmp,r1:real;
begin
tmp:=getkk(p1,p2,r1);
if tmp=0 then showmessage('成功 '+p1+' '+p2+' '+floattostr(r1));
end;这段程序是直接从例程源码中复制过来的
也不是每次都慢,比如点btn1第一次5秒,第二次5秒,第三次以后就5分钟这样
但是别人的例程连点10次就是正常的,程序完全一模一样啊俺知道这问题很抽象,,只想求教大侠们,若是你们遇到这种情况,会从何入手?俺已经晕菜了
没看出参数是怎么传递的,会不会由于内存泄漏引起。
会不会是 参数的初始值的问题呢??
试试这样呢 :(仅供参考...)
procedure Tfrm_form1.btn1Click(Sender: TObject);
var
p1,p2:pchar;
tmp,r1:real;
begin
p1 := nil;
p2 := nil;
tmp:=0;
r1:=0; tmp:=getkk(p1,p2,r1);
if tmp=0 then showmessage('成功 '+p1+' '+p2+' '+floattostr(r1));
end;
现实世界或许有诡异的东西,计算机我相应没有诡异这个说法。
这里估计该用if then else语句。
var p1,p2:pchar; var r1:real
你试着给p1,p2赋一块初始内存,尺寸大于返回值
用后将其释放,然后再试试