2010-01-26 4 views
4

J'ai obtenu un fichier .h, deux fichiers .lib, un fichier .dll et un minuscule projet de test d'un fournisseur de matériel pour parler à leur matériel.Quand inclure .lib et quand inclure .dll ou les deux

La compilation et l'exécution de leur projet de test fonctionnent correctement. Remarquable: ils n'utilisent pas le fichier .dll. Je peux lancer le répertoire dll et tout son contenu, tout fonctionne très bien. Pour commencer, j'ai simplement copié les parties de communication de leur code (connecter, déconnecter et envoyer une commande) dans mon projet. C'est en fait tout ce que vous pouvez faire. J'ai inclus le fichier .h et pointé vers le répertoire contenant les fichiers .lib. Tout comme dans le minuscule projet de test. Tout compile, mais quand j'essaie d'exécuter le projet se plaint qu'il manque le fichier .dll.

Quelqu'un peut-il expliquer ce qui se passe? Comment les libs et dll sont-elles supposées fonctionner?

Tout cela est sur windows, VS2005. J'ai comparé les fichiers .vcproj et n'a pas trouvé de différences significatives.

+0

Je vais essayer de poser cette question sur stackoverflow.com qui est plus adapté aux questions liées à la programmation. – Kez

+0

mettre la DLL dans le même répertoire que votre exécutable –

+0

Je ne comprends pas comment cela répond à ma question. Pourriez-vous expliquer s'il vous plaît. – AnnaR

Répondre

2

Le projet de test est statically lié - la lib est incluse dans l'exe.

Votre projet est dynamically lié - la DLL est référencée et donc nécessaire à l'exécution.

Voir ce Stack Overflow question pour plus d'informations.

+0

Où dans VS dois-je définir que je veux un projet lié statiquement (ou dynamiquement)? – AnnaR

+0

Vous devez configurer ceci lorsque vous créez le projet. Il est possible de le changer, mais implique d'éditer les fichiers du projet. – ChrisF

+0

Bien sûr! Je vais heureusement éditer le fichier de projet! J'ai juste besoin de savoir quoi changer. – AnnaR

2

Fondamentalement, la réponse dépend si vous allez utiliser une liaison statique ou dynamique pour votre exécutable. Avec la liaison statique, vous avez besoin des fichiers .h et .lib, mais pas des fichiers .dll à compiler et à lier. Votre exécutable sera plus grand mais vous n'aurez pas besoin des fichiers .h/.lib/.dll pendant l'exécution. Avec la liaison dynamique, il suffit de compiler et de lier les fichiers .h. Votre exécutable sera plus petit mais vous aurez besoin d'un ou des deux fichiers .dll pendant l'exécution.

Pour un traitement plus détaillé de ce point de vue de la Visual Studio, consultez http://msdn.microsoft.com/en-us/library/1ez7dh12.aspx -

« liaison dynamique diffère de statique liant en ce qu'elle permet un module exécutable (soit un fichier .dll ou .exe) pour inclure uniquement les informations nécessaires à l'exécution pour localiser le code exécutable d'une fonction DLL.En liaison statique, l'éditeur de liens récupère toutes les fonctions référencées de la bibliothèque de liens statiques et les place avec votre code dans votre exécutable.

Questions connexes