我制作了一个使用openssl dll (libeay32.dll
和ssleay32.dll
)的应用程序。使用它们的是indy,我不会直接调用dll。
我找到的避免安装程序的最简单的解决方法(我只是删除一个exe,我对这种方法没有意见)是:
在程序启动时,我将它们解压到exe文件夹
中
这是完美的,但我想改善的方法,解压缩的dll在一个临时文件夹,而不是在exe文件夹(在许多情况下是桌面)。
问题是我不知道如何强制应用程序使用temp文件夹中的dll,因为现在的行为是:如果dll不在当前目录中,请尝试在系统路径中定义的目录中进行搜索。
谁知道强制indy在我的临时路径中使用dll的解决方案?(比如“临时注册dll”)
发布于 2012-11-07 20:46:22
将DLL写入temp文件夹后,请立即使用LoadLibrary
加载DLL。
这将使Indy的LoadLibrary
在需要时使用您的DLL:
如果lpFileName不包含路径,并且有多个加载的模块具有相同的基本名称和扩展名,则该函数将返回最先加载的模块的句柄。
发布于 2012-11-08 03:38:14
如果您使用的是最新版本的Indy 10,IdSSLOpenSSLHeaders
单元有一个公共IdOpenSSLSetLibPath()
函数来告诉Indy在哪个自定义文件夹中查找OpenSSL DLL:
procedure IdOpenSSLSetLibPath(const APath: String);
发布于 2012-11-07 20:36:17
您可以使用SetDllDirectory
来操作DLL搜索顺序。
https://stackoverflow.com/questions/13269169
复制相似问题