Utiliser des dll dans un projet VS 2005 avec MFC [Résolu]

Signaler
Messages postés
8
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
19 novembre 2008
-
Messages postés
8
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
19 novembre 2008
-
Salut à tous,

Je doit controller un hardware fourni avec une dll. J'ai crée un interface graphique avec VS et les MFC. Parcontre, quand j'essaye d'utiliser des fonctions définies dans la librairie, VS me fait des erreurs de liaison (error LINK2019: unresolved external symbol ...). J'ai surement dû faire un truc de travers.

Quelqu'un peut-il m'expliquer comment déclarer et utiliser une dll dans un programme mfc?

4 réponses

Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
10
Je dirais qu'il y a 2 possibilités:
Soit ta dll est livrée avec un fichier .lib, auquel cas, tu linkes ton projet avec cette librairie:
#pragma comment(lib, "malib.lib")
Et dans ce cas, tu ne dépends même plus de la dll, pas besoin de la livrer avec ton code.

Soit tu n'as pas le fichier lib (ce qui semble être on cas).
Dans ce cas, il faut que tu "importes" les définitions de tes dll (__declspec(dllimport)) ou que tu les charges dynamiquement (LoadLibrary et GetProcAddress).
Richter t'expliqueras cela bien mieux que moi :
http://brunews.com/brunews/download/JR4.zip
http://brunews.com/brunews/download/JR4Sources.zip
Ce sont 2 documents forts intéressants paratagés par Brunews.

--Vive le CSavon
Messages postés
8
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
19 novembre 2008

D'abord un granf merci d'avoir répondu si vite :)

En fait, j'ai un fichier .lib qui va avec ma dll. J'ai aussi un header qui contient les déclarations (mais pas les définitions) de toutes les fonctions de la dll; je l'ai inclu dans le projet.

Je viens d'essayer la commande
#pragma comment(lib, "malib.lib")

... ET CA MARCHE.

Le problème est que je ne comprend pas ce que fait cette commande. Un commentaire dans un pragma c'est bien curieux pour charger une librairie ... Tu pourrais expliquer stp :)
Encore MERCI
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
10
Ce pragma est juste un moyen de lier une librairie externe à ton programme pendant le linkage. Le mot "comment" est trompeur ;)
 Lorsque tu construis ton executable, il y a plusieurs phases dont au moins ces 2 la:
1.- Compilation --> Création de fichier objets pour chaque fichier sources (.c / .cpp / ...)
2.-Linkage --> Association de chacun des fichiers objets avec résolution des addresses entre chaque pour créer ton executable

L'explication est évidemment très sommaire.
Avec le pragma que je t'ai indiqué, tu dis au linker qu'il faut qu'il inclue le fichier lib que tu auras spécifié au même titre qu'un fichier objet. Ainsi, plus de problèmes de symboles non défini.

A la différence d'une dll, le code de la librairie est contenu dans ton executable qui aura donc une taille plus importante. En contre partie, il ne dépendra pas de cette dll.

--Vive le CSavon
Messages postés
8
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
19 novembre 2008

OK. merci beaucoup. :)