Maison > développement back-end > C++ > le corps du texte

Comment modifier le chemin de recherche des DLL pour les DLL liées statiquement lorsque la DLL ne se trouve pas dans le répertoire des applications ?

Barbara Streisand
Libérer: 2024-11-03 06:01:30
original
592 Les gens l'ont consulté

How to Alter the DLL Search Path for Statically Linked DLLs When the DLL is Not in the Application Directory?

Modification du chemin de recherche des DLL pour les DLL liées statiquement

Dilemme :

Lors de la liaison statique d'un DLL à une application, il recherche généralement la DLL dans le répertoire de l'application. Toutefois, dans certains scénarios, la DLL peut ne pas se trouver dans le même répertoire. Par exemple, il pourrait résider dans un sous-dossier désigné pour les « plugins ».

Solutions possibles :

1. Liens dynamiques :

Envisagez d'utiliser LoadLibrary() et GetProcAddress() au lieu d'un lien statique pour accéder aux fonctionnalités du plugin. Cela offre une plus grande flexibilité dans le chargement de la DLL à partir de son emplacement désigné.

2. Modification de la variable d'environnement :

L'ajout du chemin du dossier du plugin à la variable d'environnement PATH du système garantit que la DLL peut être localisée et chargée avec succès.

3. Mécanisme de chargement différé :

Utilisez le mécanisme de chargement différé pour différer le chargement de la fonctionnalité du plugin. Implémentez une fonction d'assistance personnalisée qui charge les DLL en utilisant un chemin fourni.

4. Création d'assembly :

Transformez le dossier du plugin en un assembly en générant un fichier .manifest en son sein. Désignez le dossier "plugins" comme assembly dépendant au sein de l'application. Cela dirige la recherche de DLL dans le dossier du plugin.

5. Application stub et chargement dynamique :

Subdivisez l'application en un exécutable stub et un composant chargé dynamiquement. Dans l'exécutable stub, utilisez SetDllDirectory pour indiquer le dossier du plugin. Ensuite, appelez LoadLibrary en passant le chemin complet vers le fichier "appstub.dll".

Conseils supplémentaires :

Transformer un dossier en assemblage :

Pour transformer un répertoire contenant des DLL en assembly, ajoutez un fichier nommé "[folder_name].manifest" au dossier avec le contenu suivant :

<assembly manifestVersion="1.0">
  <assemblyIdentity type="Win32" name="Plugins" version="1.0.0.0" processorArchitecture="x86" />
  <file name="Plugin.dll"/>
</assembly>
Copier après la connexion

Directive Pragma pour le chargement des DLL :

Dans Visual Studio 7 ou version ultérieure, utilisez la directive pragma suivante pour demander à votre application de récupérer les DLL de l'assembly plutôt que du répertoire local :

#pragma comment(linker, "/manifestdependency:\"name='Plugins' \
                         processorArchitecture='*' version='1.0.0.0' \
                         type='win32'\"")
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal