如标题所示,调用动态库中的函数时,函数执行结束,结果正确,但是在释放过程的临时变量时,报了如上的错误,调用过程如下:
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;望高手指点
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;望高手指点
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货