Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Delphi中获取OpenSSL DLL的版本和/或位置?_Delphi_Openssl_Indy10 - Fatal编程技术网

在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文件属

出于故障排除的目的,我的应用程序是否有一种实用的方法可以在运行时进行检查:

  • openssl dll(ssleay32.dll和libeay32.dll)是否确实存在,并且是否能够由我的应用程序成功加载
  • openssl dll的实际加载路径是什么(因此我可以验证它是从应用程序目录中的副本加载的,还是从系统路径的某个地方拾取了一些散乱的副本)
  • 我的应用程序(或Indy)使用的是什么版本的openssl?(如果我知道确切的路径,大多数版本的openssl DLL都包含我可以通过查看Windows文件属性来检查的版本信息)

  • 对。按照你要求的顺序:

  • 用于每个DLL并检查返回值
  • 如果#1成功,请使用以检索加载的DLL的完整路径名
  • 如果#2成功,请使用查看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;