无法加载 SSL 库 - 找不到 dll
Could not load SSL library - dll not found
在我的 Delphi(10.3 社区版)程序中,我尝试将 Indy 与 OpenSSL 库一起使用,但收到错误消息
Could not load SSL library
我的 OpenSSL 库是 1.0.2u 版,我将 libeay32.dll
和 ssleay32.dll
文件放在我的程序 EXE 目录中,以及 Windows\SYSWOW64
和 Windows\System32
中。
我已经安装了 Embarcadero Delphi 补丁 RS1033_Indy_SSL_Patch。
异常后调用WhichFailedToLoad()
,结果为
Failed to load libeay32.dll
这是一个引发异常的简单程序:
url := 'https://www.google.it';
try
Web := TIdHTTP.Create(nil);
hIOHand := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
hIOHand.SSLOptions.SSLVersions := [sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2,sslvSSLv23];
Web.IOHandler := hIOHand;
Web.Request.UserAgent := INET_USERAGENT; //Custom user agent string
Web.RedirectMaximum := INET_REDIRECT_MAX; //Maximum redirects
Web.HandleRedirects := INET_REDIRECT_MAX <> 0; //Handle redirects
Web.ReadTimeOut := INET_TIMEOUT_SECS * 1000; //Read timeout msec
try
Sito := Web.Get(Url);
Sito := DateToStr(Web.Response.LastModified) + Sito;
except
on e : exception do
stg := WhichFailedToLoad();
end;
finally
Web.Free;
end;
你能帮我解决这个问题吗?
I put the libeay32.dll
and ssleay32.dll
files in my program EXE directory
没关系。这是 OS 将寻找它们的第一个位置。
and in Windows\SYSWOW64
and in Windows\System32
不要那样做! Non-system 文件不属于那里。特别是如果您将 相同的文件 放入两个文件夹中,因为 Windows\SYSWOW64
仅适用于 32 位文件,而 Windows\System32
仅适用于 64 位文件。
Failed to load libeay32.dll
这意味着 Windows 根本无法将该 DLL 加载到内存中。可能是因为它找不到依赖的 ssleay32.dll
文件,但更有可能是因为您混淆了 DLL 的 32 位和 64 位版本。如果您的应用程序编译为 32 位 EXE,则必须使用这两个 DLL 的 32 位版本。如果您的应用程序编译为 64 位 EXE,则必须使用两个 DLL 的 64 位版本。
在我的 Delphi(10.3 社区版)程序中,我尝试将 Indy 与 OpenSSL 库一起使用,但收到错误消息
Could not load SSL library
我的 OpenSSL 库是 1.0.2u 版,我将 libeay32.dll
和 ssleay32.dll
文件放在我的程序 EXE 目录中,以及 Windows\SYSWOW64
和 Windows\System32
中。
我已经安装了 Embarcadero Delphi 补丁 RS1033_Indy_SSL_Patch。
异常后调用WhichFailedToLoad()
,结果为
Failed to load libeay32.dll
这是一个引发异常的简单程序:
url := 'https://www.google.it';
try
Web := TIdHTTP.Create(nil);
hIOHand := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
hIOHand.SSLOptions.SSLVersions := [sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2,sslvSSLv23];
Web.IOHandler := hIOHand;
Web.Request.UserAgent := INET_USERAGENT; //Custom user agent string
Web.RedirectMaximum := INET_REDIRECT_MAX; //Maximum redirects
Web.HandleRedirects := INET_REDIRECT_MAX <> 0; //Handle redirects
Web.ReadTimeOut := INET_TIMEOUT_SECS * 1000; //Read timeout msec
try
Sito := Web.Get(Url);
Sito := DateToStr(Web.Response.LastModified) + Sito;
except
on e : exception do
stg := WhichFailedToLoad();
end;
finally
Web.Free;
end;
你能帮我解决这个问题吗?
I put the
libeay32.dll
andssleay32.dll
files in my program EXE directory
没关系。这是 OS 将寻找它们的第一个位置。
and in
Windows\SYSWOW64
and inWindows\System32
不要那样做! Non-system 文件不属于那里。特别是如果您将 相同的文件 放入两个文件夹中,因为 Windows\SYSWOW64
仅适用于 32 位文件,而 Windows\System32
仅适用于 64 位文件。
Failed to load libeay32.dll
这意味着 Windows 根本无法将该 DLL 加载到内存中。可能是因为它找不到依赖的 ssleay32.dll
文件,但更有可能是因为您混淆了 DLL 的 32 位和 64 位版本。如果您的应用程序编译为 32 位 EXE,则必须使用这两个 DLL 的 32 位版本。如果您的应用程序编译为 64 位 EXE,则必须使用两个 DLL 的 64 位版本。