17

我制作了一个使用 openssl dll(libeay32.dllssleay32.dll)的应用程序。使用它们很有趣,我不直接调用 dll。

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

  1. 将dll作为exe的资源
  2. 在程序启动时,我将它们提取到 exe 文件夹中
  3. exe使用它们

这是完美的,但我想通过在临时文件夹而不是 exe 文件夹(在许多情况下是桌面)中提取 dll 来改进方法。

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

谁知道强制 indy 在我的临时路径中使用 dll 的解决方案?(如“临时注册 dll”)

4

3 回答 3

21

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

procedure IdOpenSSLSetLibPath(const APath: String);
于 2012-11-07T19:38:14.147 回答
16

将 DLLLoadLibrary写入临时文件夹后,立即自行加载它们。
这将使 IndyLoadLibrary在需要时使用您的 DLL:

如果 lpFileName 不包含路径并且有多个加载的模块具有相同的基本名称和扩展名,则该函数返回第一个加载的模块的句柄。

于 2012-11-07T12:46:22.390 回答
10

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

于 2012-11-07T12:36:17.153 回答