显式加载 OpenSSL libcrypto-1_1.dll 问题

时间:2021-05-10 09:29:46

标签: delphi openssl

我一直在 Delphi 10.2 中通过显式加载(LoadLibrary 和 GetProcAddress)使用旧的 OpenSSL libeay32.dll。现在我想切换到更新的 libcrypto-1_1.dll(从 OpenSSL 1.1.1i 编译)。下面测试代码中的函数 BIO_read 与 libeay32.dll 一起工作正常('w' 中返回的值是 256),但是它在 libcrypto-1_1.dll 中失败('w' 中返回的值是 -1 并且 ERR_get_error 返回 0)。但是,如果我尝试隐式加载 libcrypto-1_1.dll,则下面的代码可以正常工作。

知道这里出了什么问题吗?也许Delphi在加载库时做了一些特别的事情,所以我试图在德里的源代码中找到Delphi加载dll的地方,但我没有找到它。有谁知道 Delphi 在哪个单元处理隐式加载?

procedute Test;
var sigLen,r,w:integer;
    base64Sig:TMemoryStream;
    mem,b64,bio:pBio;
    sig:pointer;
begin
  base64Sig:=TMemoryStream.Create;
  base64Sig.LoadFromFile(SignatureFileName);
  mem:=BIO_new(BIO_s_mem);
  b64:=BIO_new(BIO_f_base64);
  bio:=BIO_push(b64,mem);
  BIO_set_flags(b64,BIO_FLAGS_BASE64_NO_NL);
  r:=BIO_write(mem,base64Sig.Memory,base64Sig.Size);
  writeln(r);
  GetMem(sig,sigLen);
  w:=BIO_read(b64,sig,sigLen);
  writeln(w);
end;

0 个答案:

没有答案