如何在系统路径之外使用dll

时间:2012-11-07 11:49:54

标签: delphi dll openssl indy indy10

我创建了一个使用openssl dll(libeay32.dllssleay32.dll)的应用程序。 使用它们是indy,我不直接调用dll。

我发现最简单的解决方法是避免使用安装程序(我只是删除了一个exe,我对这种方法没问题)是:

  1. 将dll作为exe的资源
  2. 程序启动时
  3. 我在exe文件夹中提取它们
  4. exe使用它们
  5. 这很完美,但我想通过提取临时文件夹中的dll而不是exe文件夹(在很多情况下是桌面)来改进方法。

    问题是我不知道如何强制应用程序在temp文件夹中使用dll,因为现在的行为是: 如果dll不在当前目录中,请尝试搜索系统路径中定义的目录。

    谁知道迫使indy在我的临时路径中使用dll的解决方案? (比如“临时登记dlls”)

3 个答案:

答案 0 :(得分:19)

如果您使用的是Indy 10的最新版本,IdSSLOpenSSLHeaders单元有一个公共IdOpenSSLSetLibPath()函数可以告诉Indy要查找OpenSSL DLL的自定义文件夹:

procedure IdOpenSSLSetLibPath(const APath: String);

答案 1 :(得分:14)

一旦将DLL写入临时文件夹,就自己用LoadLibrary加载DLL 这将使Indy的LoadLibrary在需要时使用你的DLL:

  

如果lpFileName不包含路径且有多个路径   加载模块具有相同的基本名称和扩展名,功能   返回首先加载的模块的句柄。

答案 2 :(得分:9)

您可以使用SetDllDirectory来操纵DLL搜索顺序。