Comment “ajouter une référence” en C++
Je suis novice en C++ et il y a quelque chose que j'ai juste ne pas obtenir. En C#, si je veux utiliser une bibliothèque externe, log4net par exemple, je viens d'ajouter une référence à la log4net DLL et ses membres sont automatiquement disponibles pour moi (et dans IntelliSense). Comment dois-je faire que dans la non-managed C++?
OriginalL'auteur John M Gant | 2009-07-14
Vous devez vous connecter pour publier un commentaire.
Souvent, la bibliothèque est livré avec: 1) un fichier d'entête (.h) et 2) une .fichier lib en plus de l' .dll.
Le fichier d'en-tête est #include ed dans votre code, pour vous donner accès au type et les déclarations de fonction dans la bibliothèque.
L' .lib est lié à votre application (propriétés du projet -> linker -> entrée, dépendances supplémentaires).
L' .fichier lib contient généralement simple, les bouchons qui se charge automatiquement de la dll et de la fonction de transfert d'appels.
Si vous n'avez pas un .fichier lib, vous aurez au lieu d'avoir à utiliser la fonction LoadLibrary pour charger dynamiquement la DLL.
Je vois que je suis encore incomplète. LoadLibrary retourne un handle vous pouvez passer à GetProcAddress, qui vous donne une réelle pointeur. Vous pouvez également choisir d'appeler FreeLibrary pour le décharger. (Je suis allé de l'avant et supprimé ma réponse originale à cette question.)
Vrai, j'ai pensé que si il n'a besoin d'utiliser la fonction LoadLibrary, je venais de lui donner un point de départ, sans s'enliser dans les (nombreux) détails insignifiants.
OriginalL'auteur jalf
Le concept de base est le suivant:
Il existe 2 types de bibliothèques: statique & dynamique. La différence entre eux est que les bibliothèques statiques au cours de la liaison étape de génération intégrer leur code compilé dans votre exécutable (ou dll); dynamique libs juste intégrer les pointeurs vers les fonctions et des instructions que certaines dll devrait être chargé quand programm va chargé. Ceci est réalisé par l'éditeur de liens.
Maintenant, vous pouvez décider lequel des deux vous allez utiliser. Dll ont de nombreux avantages et des inconvénients. Si le développement d'une énorme demande, il pourrait être utile d'envisager l'aide de Dll avec un délai de chargement au lieu de bibliothèques statiques. Certaines libs sont tout simplement livrés à vous comme Dll et vous n'avez pas le choix. De toute façon la façon la plus simple pour un débutant serait d'utiliser les bibliothèques statiques. Que ferait votre déploiement et de test beaucoup plus facile, puisque lorsque l'on traite avec DLL vous devez vous assurer qu'ils se trouvent au moment de l'exécution (même lors de l'utilisation du débogueur) il s'agit de copier le tout dans un répertoire ou de traiter avec les variables de chemin d'accès.
Généralement une DLL du fournisseur (s'il est prévu que vous devriez être en mesure de faire face avec la bibliothèque) vous délivre un en-tête de fichier(s) et un .lib qui contient les appels dans la DLL nécessaire. Certains fournisseurs (par exemple, boost) seulement besoin de vous pour inclure le fichier d'en-tête et la bibliothèque est automatiquement lié à votre exécutable (peut être atteint par le biais de compilateur prorietary directive pragma). Si ce n'est pas le cas, vous devez aller dans les paramètres du projet du projet C++ (projet de properites/Propriétés de Configuration/Gestionnaire/Entrée) et entrez la lib nom du fichier dans le "Dépendances Supplémentaires" de ligne, par exemple
iced.lib iceutild.lib
. Vous pouvez aussi mettre le chemin d'accès complet des noms. Être conscient que vous avez à entrer dans le fichier lib noms pour les deux configurations (Debug, Release). C'est la procédure que vous faites avec les bibliothèques statiques et les Dll également. La seule différence que le DLL nécessitera une DLL lib soit en vous app-répertoire ou dans un de la chemin-répertoires.Après cette étape, vous pouvez encore obtenir des erreurs de compilation si vous essayez de lier des bibliothèques incompatibles. Il y a beaucoup de raisons pourquoi ils peuvent être incompatibles. Mais essayez d'abord de relier les lib de cette façon et voir si fonctionne. Si pas le, publier à nouveau vos erreurs ici 😉
Inclure des fichier(s) est(sont) utilisé pour être inclus dans des endroits où vous souhaitez utiliser qch. de la lib. Simplement l'inclure et le compilateur sait que les symboles doit provenir soit de l'autre (compilé) unité de compilation (compilé fichier cpp=>fichier de l'objet) ou l' .lib. Il fera le regarder et de vous avertir si les symboles ne sont pas trouvés.
Bonne Chance,
Ovanes
P. S. Cela peut être difficile au début, mais quand vous vous habituez à elle, il sera facile.
OriginalL'auteur ovanes
C++ n'ont pas de bibliothèques dans le sens que vous pensez. Il a fichiers d'en-tête que vous
#include
, et il y a des choses a appelé les bibliothèques de l'éditeur de liens traite, contenant le code compilé. Vous devez ajouter les bibliothèques (.Fichiers LIB) à l'éditeur de liens paramètres.Sur Windows si vous utilisez une DLL, idéalement, vous devriez avoir un .Fichier LIB pour aller avec ce qui est appelé la Bibliothèque d'Importation pour la DLL, et vous ajoutez que .Fichier LIB de votre linker settings.
OriginalL'auteur Daniel Earwicker
La première chose que vous devez faire est de #inclure le fichier d'en-tête qui décrit les fonctions qui sont disponibles dans la bibliothèque.
Le code actuel pour la bibliothèque sera dans l'un des 2 endroits:
En fonction de la façon dont la bibliothèque de code est donné pour vous (en tant qu' .fichiers lib, ou en tant que .dll), vous devrez soit:
Parfois un paquet vient avec un .lib le fichier que vous avez besoin pour le lien, et un .dll fichier. Dans ce cas, vous n'avez pas besoin d'appeler la fonction LoadLibrary, vous avez seulement besoin de #pragma comment( lib, "libaryfile.lib" ) car dans ce cas la .lib liens que vous dans le .dll.
Un détail très important est de mettre la DLL lorsque votre demande, vous pouvez trouver. Charles Petzold dit:
Je ne recommandons pas d'utiliser les propriétés du projet menu de lien car il n'est pas aussi visible que les bibliothèques que vous créez un lien.
Voir aussi
Ce n'est répondre à la question maintenant, mais pas correctement. Comme jalf.com souligné, il faut normalement le lien avec l'importation lib (à l'aide de la pragma ou autrement, de l'ajouter à la ligne de commande lib.exe avec des vents). À l'aide de la fonction LoadLibrary est la liaison tardive alternative.
OriginalL'auteur bobobobo