IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Link DLL


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par défaut Link DLL
    bonjour,
    voilà je veux utiliser une dll et j'ai l'erreur super connue :
    error LNK2001: unresolved external symbol
    j'ai pourtant défini mon .def dans project->Settings->Link->Object/Libray Module et après j'inclus un .h pour utiliser les fonctions de la dll.
    j'ai aussi testé de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #pragma comment(lib,"MALIB.LIB")
     
    extern "C" unsigned long  __cdecl rq_init_dll (char FAR *lpFile);
    extern "C" void  __cdecl rq_end_dll ();
    et là ca marche (tant que j'enleve l'include de mon .h sinon il me met cette erreur
    error C2732: linkage specification contradicts earlier specification for 'rq_init_dll'
    ) mais j'ai j'ai tellement de fonctions à importer que je me vois mal les declarer une par une...
    quelqu'un a t il une idée ?

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    salut,
    est-ce que dans le .h, les prototypes sont définis avec

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2004
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 122
    Par défaut
    Salut, ce n'est pas ton .def que tu dois mettre dans les sttings de ton projet, c'est le .lib de ta dll.

  4. #4
    Membre confirmé Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par défaut
    non ils ne sont pas définis avec
    extern "C"
    ca viendrait d ca?

    sinon désolé oui c'est bien le .lib que j'ai mis pas le .def

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2004
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 122
    Par défaut
    Ce que je fais généralement quand je crée une DLL exportant des fonctions ou des classes, c'est une fichier de définition d'export de la DLL, ce fichier sert à définir le symbole utilisé par ta DLL et par ton programme appelant pour exporter et importer tes fonctions.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #ifdef MA_DLL_EXPORTS
    #define MA_DLL_API __declspec(dllexport)
    #else
    #define MA_DLL_API __declspec(dllimport)
    #endif
    Chacune de tes classes et fonctions exportée doit être préfixée de cette définition pour être exportée et importée.

    Le symbole MA_DLL_EXPORTS étant défini dans ta DLL, tes fonctions seront exportées. Ce symbole n'étant pas défini dans ton programme utilisant ta DLL, tes fonctions seront importées.

    En espérant que ce t'aide.

  6. #6
    Membre confirmé Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par défaut
    oui, mais ce n'est pas ma dll et j' n'ai accès qu'au .h et a la lib.
    sinon il ne faudrait pas que j'ajoute ca dans mon .h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #ifdef __cplusplus 
    extern "C" 
    { 
    #endif 
     
     //declaration des fonctions
     
    #ifdef __cplusplus 
    } 
    #endif
    on dirait que ca fonctionne

  7. #7
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    c'est effectivement la bonne méthode

  8. #8
    Membre confirmé Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par défaut
    ok, merci bien nico

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur de LINK DLL
    Par ZeNoob dans le forum Visual C++
    Réponses: 4
    Dernier message: 22/05/2013, 12h08
  2. Erreur de link dll
    Par Tyfox dans le forum C++
    Réponses: 11
    Dernier message: 24/06/2008, 10h20
  3. Problême de compilation ( links, DLL )
    Par dekron dans le forum Ogre
    Réponses: 6
    Dernier message: 07/02/2007, 20h13
  4. probleme link dll
    Par Kokocha dans le forum C++
    Réponses: 13
    Dernier message: 13/10/2006, 13h00
  5. [DLL/classe template] problème de link
    Par Bob.Killer dans le forum C++
    Réponses: 7
    Dernier message: 31/08/2005, 18h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo