用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)
//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)
function DESEncryStr(Str,Key:PChar;len :integer;):PChar;stdcall;export;
begin
try
ShowMessage(Str);
会不会是你在delphi里面修改了Str的值,因为你传进来的是指针,找找看哦。
在主程序中分配内存,把地址传入DLL,DLL中做一些业务处理,把值添到相应的地址上。而后DLL的相关资源做释放就OK了!
你这种值返回,当函数执行后,返回值已经被DLL的内存管理器释放了,只是由于当前内存块没有被立即收回,所以侥幸看到了一个数值,否则会出内存错误!