在Delphi中获取OpenSSL DLL的版本和/或位置?
出于故障排除的目的,我的应用程序是否有一种实用的方法可以在运行时进行检查:在Delphi中获取OpenSSL DLL的版本和/或位置?,delphi,openssl,indy10,Delphi,Openssl,Indy10,出于故障排除的目的,我的应用程序是否有一种实用的方法可以在运行时进行检查: openssl dll(ssleay32.dll和libeay32.dll)是否确实存在,并且是否能够由我的应用程序成功加载 openssl dll的实际加载路径是什么(因此我可以验证它是从应用程序目录中的副本加载的,还是从系统路径的某个地方拾取了一些散乱的副本) 我的应用程序(或Indy)使用的是什么版本的openssl?(如果我知道确切的路径,大多数版本的openssl DLL都包含我可以通过查看Windows文件属
对。按照你要求的顺序:
Windows
单元获得。Delphi中所有三个的示例都可以在StackOverflow中找到。如果你找不到它们,请在这里单独发布问题(见下文),使用它们寻求帮助
(这里的帖子应该包含一个问题,这样就可以选择一个答案作为答案。如果你在同一篇帖子中包含多个问题,那么几个人可以分别回答其中一个问题;在这种情况下,你如何选择哪一个是正确的?Indy 10有一个
IdOpenSSLSetLibPath()
在IdSSLOpenSSLHeaders.pas单元中运行,这样您就可以告诉Indy DLL位于何处,而不必在操作系统搜索路径上查找它们
最好的选择是只在应用程序的安装目录中提供所需的DLL,这样就不需要猜测应用程序将加载什么。您可以使用OpenSSL api获取版本号。使用Marco Ferrante的libeay32.pas found和以下函数(我修改了Marco的GetVersion示例,因为它有点不正确):
我只需提供应用程序目录中库的完整路径,并随应用程序一起提供。这样,您唯一担心的就是发布最新版本的OpenSSL。
function GetOpenSSLVersion: string;
var
v: cardinal;
s: PCharacter;
begin
//Get the numeric release version identifier as described in http://www.openssl.org/docs/crypto/OPENSSL_VERSION_NUMBER.html#
v := SSLeay;
//Get text version number and release date, e.g.: "OpenSSL 0.9.5a 1 Apr 2000"
s := SSLeay_version(_SSLEAY_VERSION);
result := s + ' (' + IntToHex(v, 9) + ')';
end;