2011-10-21 5 views

Répondre

31

Sur Windows, vous ne devez pas lier avec un fichier .dll directement –, vous devez utiliser le fichier .lib à la place. Pour ce faire, allez à Project -> Properties -> Configuration Properties -> Linker -> Additional Dependencies et ajoutez le chemin d'accès à votre fichier .lib en tant que ligne suivante.

Vous devez aussi assurez-vous que le fichier .dll est soit dans le répertoire contenu par la variable d'environnement %PATH% ou que sa copie est en Output Directory (par défaut, c'est Debug\Release dans le dossier de votre projet).

Si vous n'avez pas accès au fichier .lib, une alternative est de charger le .dll manuellement lors de l'exécution en utilisant les fonctions de winapi telles que LoadLibrary et GetProcAddress.

+0

J'ai vu des endroits où ils mentionnent les fichiers .h aussi. Avons-nous besoin d'eux pour ce processus? Je pense qu'ils ne sont pas nécessaires, puisque le fichier .lib contient toutes les informations pour la DLL. – darkgaze

+0

@darkgaze Je pense qu'ils sont encore nécessaires car les fichiers .h contiennent généralement tous les prototypes, déclarations, constantes, macros, etc –

19

Vous n'ajoutez pas ou ne liez pas directement à une DLL, vous liez le LIB généré par la DLL. Un LIB fournit des symboles et d'autres données nécessaires pour inclure une bibliothèque dans votre code (liaison statique) ou se référer à la DLL (liaison dynamique). Pour créer un lien avec un LIB, vous devez l'ajouter à la liste Propriétés du projet -> Lieur -> Saisie -> Dépendances supplémentaires. Tous les fichiers LIB ici seront utilisés dans la liaison. Vous pouvez également utiliser un pragma comme ceci:

#pragma comment(lib, "dll.lib") 

Avec la liaison statique, le code est inclus dans votre exécutable et il n'y a pas de dépendances d'exécution. La liaison dynamique nécessite une DLL avec le nom correspondant et les symboles disponibles sous the search path (et non juste le chemin d'accès ou le répertoire système).

+2

A propos de la liaison statique: Comment puis-je faire Visual Studio pour copier la DLL d'un certain répertoire à la sortie sur la construction (ou sur la liaison)? – Marcel

+2

@Marcel Chaque projet fournit des étapes de pré-construction, de post-construction et d'autres étapes (vérifiez les paramètres du projet). Vous pouvez y copier un fichier, ou même exécuter un script complet (j'ai un script configuré pour créer un en-tête à partir des ID de révision git et incrémenter le numéro de build dans pre-build, puis copier les fichiers dans une installation de test). – ssube