我创建了一个使用openssl dll(libeay32.dll
和ssleay32.dll
)的应用程序。
使用它们是indy,我不直接调用dll。
我发现最简单的解决方法是避免使用安装程序(我只是删除了一个exe,我对这种方法没问题)是:
这很完美,但我想通过提取临时文件夹中的dll而不是exe文件夹(在很多情况下是桌面)来改进方法。
问题是我不知道如何强制应用程序在temp文件夹中使用dll,因为现在的行为是: 如果dll不在当前目录中,请尝试搜索系统路径中定义的目录。
谁知道迫使indy在我的临时路径中使用dll的解决方案? (比如“临时登记dlls”)
答案 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搜索顺序。