如标题所示,调用动态库中的函数时,函数执行结束,结果正确,但是在释放过程的临时变量时,报了如上的错误,调用过程如下:
procedure TForm1.Button2Click(Sender: TObject);
var
    str,str1,str2,str3 : string ;
begin
    str := edit2.text ;
    str3 := 'abcdefgh';
    str2:= DeCrypt(chr(15),str,str3);
    edit3.Text := str2 ;
end;
动态库中的过程申明如下:
Function DeCrypt(Fchar : char;MStr : string; key:string):string;stdcall;external '..\des.dll';动态库的代码如下:
library des;uses
    ShareMem,
  SysUtils,
  Classes,
  desutil in 'desutil.pas';{$R *.res}exports
    EnCrypt
    ,DeCrypt
    ;
begin
end.
其中,desutil.pas函数代码如下:Function DeCrypt(Fchar : char;MStr : string; key:string):string;stdcall;
var
    tmpstr : array[0..7]of char ;
    tmpsrc : array[0..15]of char ;
    i : integer ;
    resStr : string;
    Src,Dest,tmpkey : TBlock ;
begin
    Fillchar(src,sizeof(src),Fchar);
    FillChar(tmpkey,sizeof(tmpkey),$0f);    FillChar(tmpstr,sizeof(tmpstr),$0f);
    copymemory(@tmpstr,@key[1],length(key));
    char2BCD(tmpstr,tmpkey);    CopyMemory(@tmpsrc,@MStr[1],16);
    CharArray2BCD(src,tmpsrc);    DesCrypt(src,tmpkey,1,dest);
    Bcd2Char(dest,tmpstr);
    for i := high(tmpstr) downto low(tmpstr) do
    begin
        if tmpstr[i] <> Fchar then break;
        tmpstr[i] := ' ';
    end;
    setlength(resstr,8);
    copymemory(@resstr[1],@tmpstr, 8);
//    for i := low(tmpstr) to high(tmpstr) do
//        resstr := resstr + tmpstr[i];
    Result := trim(resstr) ;
end;望高手指点