用delphi写了一个DLL,里面封装了DES加密函数,函数代码如下:
//DES加密
 function   DESEncryStr(Str,Key:PChar;len :integer;):PChar;stdcall;export;
  begin
      try
        ShowMessage(Str);
        result:=PChar(EncryStrHex(LeftBStr(StrPas(Str),Len),StrPas(Key)));
      except
        on E: Exception do result:=PChar('Error/'+E.Message);
      end;
end;现在用VB调用,在一个按钮里调用这个API,会发生一个奇怪的现象,每次运行程序,第一次点击按钮,showmessage是一个值,以后就会变成另外一个值,其实每次传递的都是一个值。在PB测试也发生同样的现象。请高手指点迷津,谢谢
VB调用代码如下:ls_str = "中国人"
DESEncryStr(ls_str, "AAAA", 6)

解决方案 »

  1.   

    不奇怪,这个函数的“返回值”在函数结束后已经释放了,用 Result:=PChar(ALocalString) 做返回值出任何问题都是正常的
      

  2.   

    谢谢回答,可是我现在是在函数的初始,showmessage的是传递进来的参数,而非返回值每次传递相同的参数,为什么showmessage会有差别//DES加密
     function DESEncryStr(Str,Key:PChar;len :integer;):PChar;stdcall;export;
      begin
      try
      ShowMessage(Str);
      

  3.   

    function DESEncryStr(const Str,Key:PChar;const len :integer;):PChar;stdcall;export;这样试下,还有楼主可以用delhpi调用看看,不应该出现你说的那样!
      

  4.   


    会不会是你在delphi里面修改了Str的值,因为你传进来的是指针,找找看哦。
      

  5.   

    一般情况是这样做:
    在主程序中分配内存,把地址传入DLL,DLL中做一些业务处理,把值添到相应的地址上。而后DLL的相关资源做释放就OK了!
    你这种值返回,当函数执行后,返回值已经被DLL的内存管理器释放了,只是由于当前内存块没有被立即收回,所以侥幸看到了一个数值,否则会出内存错误!