I made an application that uses the openssl dlls (libeay32.dll
and ssleay32.dll
).
It is indy using them, I don't call the dlls directly.
The simplest workaround i found to avoid an installer (i just delpoy an exe and i am ok with this approach) is to:
- put the dlls as resources of the exe
- on program start I extract them in the exe folder
- the exe uses them
This is perfect but I would like to improve the approach by extracting the dlls in a temp folder and not on the exe folder (that in many cases is the desktop).
The problem is that I don't know how to force the application to use the dlls in the temp folder, because now the behaviour is: if dlls are not in current directory try to search in the directories defined in the system path.
Who knows a solution to force indy to use the dlls in my temp path? (like "temporarly registering the dlls")
Load the DLLs yourself with LoadLibrary
as soon as you have written them to the temp folder.
This will make Indy's LoadLibrary
use your DLLs when they need them:
If lpFileName does not include a path and there is more than one loaded module with the same base name and extension, the function returns a handle to the module that was loaded first.
If you are using an up-to-date version of Indy 10, the IdSSLOpenSSLHeaders
unit has a public IdOpenSSLSetLibPath()
function to tell Indy which custom folder to look in for the OpenSSL DLLs:
procedure IdOpenSSLSetLibPath(const APath: String);
You can use SetDllDirectory
to manipulate the DLL search order.
来源:https://stackoverflow.com/questions/13269169/how-to-use-a-dll-outside-of-the-system-path