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

C Discussion :

Compilation séparée dans Dll en C


Sujet :

C

  1. #1
    Membre actif
    Profil pro
    Ingénieur
    Inscrit en
    Avril 2013
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Avril 2013
    Messages : 77
    Par défaut Compilation séparée dans Dll en C
    Bonjour,

    Je suis en train de créer une DLL en C, et j'ai un petit soucis de liens.

    Dans main.cpp, je déclare cette fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     extern "C" __declspec(dllexport) enum err_msg MORPHO_connexion (int numPort, char* adresseIP)
    {
    	if(pIPSocket->isConnected == vrai)
    	{
    		return ERR_INCONNEXION;
    	}
    	else
    	{
    		return IP_connexion(numPort,adresseIP,pIPSocket);
    	}
    }
    Cette fonction fait appel à IP_connexion() définie dans IP.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    enum err_msg IP_connexion(int numPort, char* adresseIP, s_IPSocket* pSock)
    {
    //code.....
    }
    La déclaration se fait dans "IP.h" qui est inclus dans main.cpp ("#include "IP.h")

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    enum err_msg IP_connexion(int numPort, char* adresseIP, s_IPSocket* pSock);
    A la compilation, j'ai l'erreur suivante:

    MorphoDll.obj : error LNK2001: symbole externe non résolu "enum err_msg __cdecl IP_connexion(int,char *,struct sock *)" (?IP_connexion@@YA?AW4err_msg@@HPADPAUsock@@@Z)
    Je ne vois pas quel peut être le problème, le fichier IP.c appartient bien au projet.
    Auriez vous une idée?
    Merci par avance

  2. #2
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 872
    Par défaut
    J'étais sur un problème similaire et j'avais trouvé la solution grâce à ce lien.

    Bon courage.

  3. #3
    Membre actif
    Profil pro
    Ingénieur
    Inscrit en
    Avril 2013
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Avril 2013
    Messages : 77
    Par défaut
    Merci d'avoir répondu.
    En fait ce n'est pas un problème de liaison entre la dll et le programme l'utilisant, mais au sein de la dll elle même.
    Je souhaite simplement utiliser dans ma dll des fonctions que je n'exporterai pas mais qui sont utiles pour des fonctions exportables. (en l'occurence ici IP_Connexion()).
    J'ai testé en mettant le code source de la fonction directement dans le main.cpp, avec la fonction qu'il l'utilise, ce qui fonctionne;
    mais dès que je le mets dans un autre fichier c (IP.c), et sa déclaration dans un fichier h (IP.h) qui est définit dans le main.cpp (#include "IP.h"), j'ai une erreur au niveau de l'éditeur de liens...

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Problème de name mangling.
    IP.h devrait contenir ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #ifdef __cplusplus
    extern "C" {
    #endif
     
    enum err_msg IP_connexion(int numPort, char* adresseIP, s_IPSocket* pSock);
     
    #ifdef __cplusplus
    }
    #endif
    Ou bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #ifndef EXTERN_C
    #ifdef __cplusplus
    #define EXTERN_C extern "C"
    #else
    #define EXTERN_C extern
    #endif
    #endif
     
    EXTERN_C enum err_msg IP_connexion(int numPort, char* adresseIP, s_IPSocket* pSock);
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre actif
    Profil pro
    Ingénieur
    Inscrit en
    Avril 2013
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Avril 2013
    Messages : 77
    Par défaut
    Merci

    Le problème est résolu!

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

Discussions similaires

  1. Pb curseur dans DLL
    Par dede92 dans le forum Windows
    Réponses: 5
    Dernier message: 16/03/2005, 12h15
  2. PB pour Appel fonction dans DLL sur Builder3
    Par Fbartolo dans le forum C++Builder
    Réponses: 15
    Dernier message: 10/03/2005, 12h58
  3. gestionnaire d'Exception dans DLL
    Par pirbd dans le forum Langage
    Réponses: 2
    Dernier message: 03/03/2005, 18h58
  4. Réponses: 5
    Dernier message: 11/02/2005, 16h52
  5. Problème de compilation de la DLL du XMLRad
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 2
    Dernier message: 16/04/2003, 16h46

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