web-dev-qa-db-fra.com

DLL Références dans Visual C ++

J'ai eu une expérience C++ mais pas MSVC.

Ce que j'essaie de faire est d'incorporer un .dll d'un projet open source dans mon projet. Le code est disponible et je l'ai construit. J'ai le .dll ainsi que le .lib qui, si je comprends bien, est requis pour les projets C++.

Maintenant, malheureusement, il n'y a pas de simple "Ajouter une référence", déposez mon .dll dans un répertoire include et ajoutez-le à ma solution. J'ai édité les pages de propriétés du projet, l'option C/C++ Additional Include Directories ainsi que l'ajout du .lib en tant que dépendance de l'éditeur de liens supplémentaire. J'ai créé un répertoire include pour la dll et la lib dans mon arborescence de solutions.

Mon problème est lorsque j'essaie d'inclure les fichiers d'en-tête de la documentation, la sortie VS crache des messages d'erreur. Maintenant, je me rends compte que j'utilise le combo dll/lib et que les fichiers .h ne sont pas présents dans ma solution, alors comment ajouter les inclusions appropriées? J'utilise également la boîte à outils QT qui fonctionne, mais la façon dont j'ajoute l'autre en-tête/DLL de la bibliothèque open source m'échappe.

Quelqu'un peut-il m'orienter dans la bonne direction?.

44
Mark Stahler

Vous devez faire quelques choses pour utiliser la bibliothèque:

  1. Assurez-vous que vous disposez à la fois des fichiers * .lib et * .dll de la bibliothèque que vous souhaitez utiliser. Si vous n'avez pas le * .lib, sautez # 2

  2. Mettez une référence au * .lib dans le projet. Cliquez avec le bouton droit sur le nom du projet dans l'Explorateur de solutions, puis sélectionnez Propriétés de configuration-> Éditeur de liens-> Entrée et placez le nom de la bibliothèque dans la propriété Dépendances supplémentaires.

  3. Vous devez vous assurer que VS peut trouver la bibliothèque que vous venez d'ajouter, vous devez donc aller dans le menu Outils et sélectionner Options ... Ensuite, sous Projets et solutions, sélectionnez Répertoires VC++, option d'édition du répertoire de bibliothèque. À partir d'ici, vous pouvez définir le répertoire qui contient votre nouvelle bibliothèque en sélectionnant les "Fichiers de bibliothèque" dans la liste déroulante "Afficher les répertoires pour:". Ajoutez simplement le chemin de votre fichier lib dans la liste des répertoires. Si vous n'avez pas de bibliothèque, vous pouvez l'omettre, mais pendant que vous êtes ici, vous devrez également définir le répertoire qui contient vos fichiers d'en-tête également sous "Inclure les fichiers". Faites-le de la même manière que vous avez ajouté la lib.

Après cela, vous devriez être prêt à utiliser votre bibliothèque. Si vous n'avez pas de fichier lib, vous pouvez toujours utiliser la dll en l'important vous-même. Lors du démarrage de vos applications, vous pouvez explicitement charger la DLL en appelant LoadLibrary (voir: http://msdn.Microsoft.com/en-us/library/ms684175 (VS.85) .aspx pour plus d'informations )

À votre santé!

MODIFIER

N'oubliez pas d'utiliser #include <Foo.h> par opposition à #include "foo.h". Le premier recherche le chemin d'inclusion. Ce dernier utilise les fichiers de projet locaux.

78
Aaron Cook

Les répertoires include supplémentaires sont relatifs au répertoire du projet. Il s'agit normalement du répertoire où se trouve votre fichier de projet, * .vcproj. Je suppose que dans votre cas, vous devez simplement ajouter "include" à vos répertoires d'inclusion et de bibliothèque.

Si vous voulez être sûr du répertoire de votre projet, vous pouvez vérifier la valeur de la macro $ (ProjectDir). Pour ce faire, allez dans "C/C++ -> Additional Include Directories", appuyez sur le bouton "..." et dans la boîte de dialogue contextuelle, appuyez sur "Macros >>".

2

Vous mentionnez l'ajout du répertoire d'inclusion supplémentaire (C/C++ | Général) et la dépendance de lib supplémentaire (Linker | Input), mais avez-vous également ajouté le répertoire de bibliothèque supplémentaire (Linker | General)?

L'inclusion d'un exemple de message d'erreur pourrait également aider les gens à répondre à la question car il n'est même pas clair si l'erreur se produit lors de la compilation ou de la liaison.

1
imaginaryboy