俺的程序要调用别人提供的一个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次就是正常的,程序完全一模一样啊俺知道这问题很抽象,,只想求教大侠们,若是你们遇到这种情况,会从何入手?俺已经晕菜了

解决方案 »

  1.   

    getkk(p1,p2,r1);
    没看出参数是怎么传递的,会不会由于内存泄漏引起。
      

  2.   

    可能你的程序在调用DLL时的参数不对.......
      

  3.   


    会不会是 参数的初始值的问题呢??
    试试这样呢 :(仅供参考...)
    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;
      

  4.   

    楼上兄弟的办法也不行。。****************************最新情况是,俺直接把例程做成BPL(以前是EXE,俺的主程序都是BPL调用的),然后从俺的主程序调用,然后的然后例程都变慢了,,俺擦擦的,是主程序坏境有啥问题?这问题的技术含量太高了,,俺继续晕厥中,,求救
      

  5.   

    单独调用试试?或者,用FastMM测试下有没有内存泄露。
    现实世界或许有诡异的东西,计算机我相应没有诡异这个说法。
      

  6.   

    例程相当于单独调用了吧,速度是正常的FASTMM没用过噢,俺的D6怎么用啊俺现在也怀疑是内存方面的问题,如果确实如此,这么简单的一个调用又该如何修改程序呢?DLL是别人提供的没法修改噢,只能改自己的
      

  7.   

    DLL没源码跟踪不了,,俺的程序可以跟踪,不过也没报错啊,就是巨慢,,,,
      

  8.   

    if tmp=0 then showmessage('成功 '+p1+' '+p2+' '+floattostr(r1));
    这里估计该用if   then    else语句。
      

  9.   

    如果可以的话 ,DLL弄出来 ,大家试试........
      

  10.   

    感觉是内存问题,你有dll 的源码么?
    var p1,p2:pchar; var r1:real
    你试着给p1,p2赋一块初始内存,尺寸大于返回值
    用后将其释放,然后再试试