出于疑难解答的目的,我的应用程序可以在运行时检查是否有实用的方法:
答案 0 :(得分:3)
是。按照你要求的顺序:
LoadLibrary
并检查返回值。GetModuleFileName
检索已加载的DLL的完整路径名。GetFileVersionInfo
查看DLL是否有可用的文件版本信息。如果是,请使用VerQueryValue
读取版本信息(通过查看Windows文件属性看到的相同信息)。它们全部来自Windows
单元。 Delphi中的所有三个示例都应该在StackOverflow中找到。如果您找不到它们,请在此处发布单独的问题(请参阅下文)以寻求帮助。
(这里的帖子应该包含一个问题,因此可以选择一个答案作为答案。如果你在同一篇文章中包含多个问题,几个人可以分别回答其中一个;在这种情况下,怎么办?你选择哪一个接受正确?)
答案 1 :(得分:2)
Indy 10在IdSSLOpenSSLHeaders.pas单元中有一个IdOpenSSLSetLibPath()
函数,因此您可以告诉Indy DLL所在的位置,而不是必须在OS搜索路径上搜索它们。
最好的选择是在应用程序的安装目录中发送所需的DLL,然后无需猜测即可知道应用程序将加载的内容。
答案 2 :(得分:2)
您可以使用OpenSSL api获取版本号。使用Marco Ferrante的libeay32.pas找到here和以下函数(我修改了Marco的GetVersion示例,因为它稍微不正确):
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;