与SSL DLL

时间:2018-06-07 13:44:42

标签: delphi openssl

使用:

  • Delphi Berlin update 2
  • Indy版本10.6.2.5341
  • Websocket(sgcWebSocketClient,4.1.7.0)

我们有一个应用程序适用于某些机器而不适用于其他机器。环境是一样的,最近安装的Windows 10没有任何其他程序。硬件是一样的,因为我们这里有很多相同的硬件。

好吧,当我们尝试以安全方式连接时,使用SSL我们得到“无法加载SSL库”。我们没有在任何机器上安装OpenSSL(即使是工作正常的机器) 我们尝试过与ESEGECE的支持......但直到现在才解决。

我们尝试使用regsvr32注册DLL,但是我们遇到了一些错误并且无法注册。这些是我们得到的消息:

  

模块“libeay32.dll”已加载,但未找到入口点DllRegisterServer。确保“libeay32.dll”是有效的DLL或OCX文件,然后重试。

或者我们得到:

  

模块“C:\ Central \ libeay32.dll”无法加载。确保二进制文件存储在指定的路径中或调试它以检查二进制文件或从属.DLL文件的问题。无法找到指定的模块

DLL文件是正确的,因为我们从ESEGECE示例中复制。

我们使用WhichFailedToLoad()来确定发生了什么,但我们收到“无法加载libeay32.dll”消息。

我们还尝试使用SafeLoadLibrary()指向DLL所在的位置。

我们使用IdOpenSSLSetLibPath()进行了测试,但未成功。

GetLastError()返回0.

我们在这里找到了类似的问题,尝试了上面提到的解决方案,但没有成功。

你还有其他建议吗?

1 个答案:

答案 0 :(得分:4)

您不能使用regsvr32注册OpenSSL DLL,因为它们不是ActiveX / COM服务器。

假设您同时拥有ssleay32.dlllibeay32.dlllibeay32.dll无法加载的最可能原因是:

  • 您正在使用对其他DLL具有外部依赖性的libeay32.dllssleay32.dll的第三方分发,例如您尚未安装的Visual C ++运行时。使用Dependency Walker之类的工具进行验证。

    尝试使用Indy的Fulgan镜像上提供的OpenSSL DLL,因为它们没有任何外部依赖关系(彼此除外):

    https://indy.fulgan.com/SSL/

  • 您的应用是64位,但您使用的是32位版本的libeay32.dllssleay32.dll,反之亦然。