Comment utiliser une dll en dehors du chemin d'accès système

j'ai fait une application qui utilise openssl dll (libeay32.dll et ssleay32.dll). C'est indy qui les utilise, Je n'appelle pas directement les dlls.

la solution la plus simple que j'ai trouvée pour éviter un installateur (j'ai juste delpoy un exe et je suis ok avec cette approche) est de:

  1. mettre les dlls comme ressources de l'exe
  2. sur le début du programme, je les extraire dans le dossier exe
  3. l'exe utilise

C'est parfait, mais je voudrais améliorez l'approche en extrayant les dlls dans un dossier temporaire et non dans le dossier exe (qui dans de nombreux cas est le bureau).

le problème est que je ne sais pas comment forcer l'application à utiliser les dlls dans le dossier temporaire, parce que maintenant le comportement est: si les dll ne sont pas dans le répertoire courant, essayez de rechercher dans les répertoires définis dans le chemin d'accès système.

qui sait une solution pour forcer indy à utiliser les dlls dans mon parcours temporaire? (comme "temporairement l'enregistrement de l' dll")

15
demandé sur Bruno 2012-11-07 15:49:53

3 réponses

chargez vous-même le DLLs avec LoadLibrary dès que vous avez écrites dans le dossier temp.

Cela va faire Indy LoadLibrary utilisez vos DLLs quand ils en ont besoin:

si lpFileName n'inclut pas de chemin et qu'il y en a plus d'un module chargé avec le même nom de base et d'extension, la fonction renvoie une poignée au module qui a été chargé en premier.

14
répondu frogb 2012-11-07 14:49:38

si vous utilisez une version mise à jour D'Indy 10, le IdSSLOpenSSLHeaders l'unité a un public IdOpenSSLSetLibPath() fonction pour indiquer à Indy dans quel dossier personnalisé chercher les DLLs OpenSSL:

procedure IdOpenSSLSetLibPath(const APath: String);
18
répondu Remy Lebeau 2012-11-07 19:38:14

Vous pouvez utiliser SetDllDirectory pour manipuler L'ordre de recherche DLL.

9
répondu David Heffernan 2012-11-07 13:29:59