Utiliser des dll dans un projet VS 2005 avec MFC

Résolu
ebrainis
Messages postés
8
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
19 novembre 2008
- 18 nov. 2008 à 20:36
ebrainis
Messages postés
8
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
19 novembre 2008
- 19 nov. 2008 à 15:37
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

julienbj
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
15
18 nov. 2008 à 21:51
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
3
ebrainis
Messages postés
8
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
19 novembre 2008

18 nov. 2008 à 22:39
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
0
julienbj
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
15
19 nov. 2008 à 00:02
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
0
ebrainis
Messages postés
8
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
19 novembre 2008

19 nov. 2008 à 15:37
OK. merci beaucoup. :)
0