一个函数:
myfunc(SStr,KStr:string;bFlag:boolean=false):string;
begin
...
...//这里调用其它单元的函数
...
end;
上面的函数是我项目程序里的一个函数,在程序运行的时候,它的返回值偶尔会错,因为我把这个函数单独拿出来测试的时候是正确的,在项目程序里运行的时候偶尔会出错,为什么,求解!!!

解决方案 »

  1.   

    这个问题困扰我有三天了,竟然没有能找到原因所在,我身为一个CSDN的一员,对CSDN很失望
      

  2.   

    据我估计,你的Result没有默认返回值
      

  3.   

    典型的重入问题,不了解就BAIDU下。
      

  4.   


    改成这样就不报错了myfunc(SStr,KStr:string;bFlag:boolean=false):string;
    begin
    ...
    end;//...处由于公司保密制度,不能向您透露
      

  5.   

    看看这个例子你就知道了
    function GetNumberType( n: Integer ): string;
    begin
      if n mod 2 = 0 then
        Result := '偶数';
    end;  procedure TF_Main.btnTestClick(Sender: TObject);
    var
      i: Integer;
    begin
    //
      for i := 1 to 4 do
        AddMsg( '结果:' + GetNumberType( i ) );
    end;输出的结果是:
    结果:
    结果:偶数
    结果:偶数
    结果:偶数
      

  6.   

    牛人多啊,这么个样的问题都能有这么详细的回答,我身为一个CSDN的一员,对CSDN很不失望
      

  7.   

    补充说明:
    我的函数是一个加密函数,是用DES加密的,加密的时候传入string字符串,测试的时候没有问题,当函数在程序里运行的时候偶尔会出现加密不正确
      

  8.   

    那是不是你加密的字符串给java用呢?
      

  9.   

    问题的补充:
    客户端发请求给服务器,发送的请求包是由包头与包体组成,并且是加了密的,服务器端收到请求包后,进行解密,提取出包头里的验证信息clientmac,然后再把包体进行加密(验证方法加密,与客户端得出clientmac的加密方法一样),得出servermac,得出的servermac与提取的clientmac比较,如果一致则验证通过,否则验证失败!
    上面的验证加密是DES加密方法,问题是这个验证函数在程序运行的时候,它的返回值偶尔会错,把这个函数单独拿出来测试的时候是正确的,在项目程序里运行的时候偶尔会出错。