Problème avec dll

loiclm86 Messages postés 21 Date d'inscription dimanche 5 avril 2009 Statut Membre Dernière intervention 3 février 2010 - 5 avril 2009 à 15:12
loiclm86 Messages postés 21 Date d'inscription dimanche 5 avril 2009 Statut Membre Dernière intervention 3 février 2010 - 6 avril 2009 à 00:07
Bonjour,

J'aimerais créer et utiliser une dll. J'ai regardé sur internet mais j'ai quelques pbs.
J'utilise Vista et Codeblocks.

Je crée d'abord le projet dll puis un .cpp "main" que voici :

#include
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

extern "C"   __declspec(dllexport) void affichage()
{
        printf("test\n");
}

Je compile en debug et dans mon répertoire bin/debug, je trouve bien ma .dll, un .def et un .a.

Premier pb : il n'y a pas de .lib !!

Bref passons. Dans mon projet client ou je crée un autre "main.cpp", j'écrie :

#include
using namespace std

extern "C" __declspec(dllimport) void affichage();
int main()
{
    affichage();
    return 0;
}

et je reçois le message d'erreur : "undefined reference to __imp__affichage"

Voila donc le .lib n'existe pas. Comment faire pour le générer ? Et de plus après est-ce que mon code du programme client est correct ?

Merci d'avance !

4 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
5 avril 2009 à 18:26
Tu ne dois pas utiliser de fichier .lib sous MinGW : son équivalant est le .a
Ajouter la librairie dans Project -> Build Options -> Linker Settings -> Link Libraries.
Tu dois donner le chemin du fichier .a
Pour ton programme client, inclus le header de ta dll.

De plus, dans ta DLL ça suffit largement comme header :
#include <stdio.h>
//#include <stdlib.h> // Décommenter si besoin de strlen & co.
#include <windows.h>
loiclm86 Messages postés 21 Date d'inscription dimanche 5 avril 2009 Statut Membre Dernière intervention 3 février 2010
5 avril 2009 à 19:22
ok cool ça marche !

Une question au passage : les .a et .lib c'est donc la même chose au compilateur près ? D'ailleurs en regardant sur le net, on peut lire que les .a et les .lib sont relatifs à des librairies statiques. Mais .ddl c'est dynamique donc pourquoi avoir besoin des .a ou .dll) ?
Peut-être que ma question est débile je ne sais pas mais tous les sites que j'ai vu où ceci est expliqués sont soit trop compliqué pour un débutant dll soit pas rigoureux du tout...

Merci à toi en tt cas ! 
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
5 avril 2009 à 23:49
En fait c'est effectivement une librairie statique qui te permettra d'accéder à ta DLL.
Elle contient la liste des fonctions qui se trouvent dans la DLL ...
loiclm86 Messages postés 21 Date d'inscription dimanche 5 avril 2009 Statut Membre Dernière intervention 3 février 2010
6 avril 2009 à 00:07
ok thx !
Rejoignez-nous