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 :

Utiliser une bibliothèque statique


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Par défaut Utiliser une bibliothèque statique
    Salut à tous,
    J'ai un gros souci ...
    En fait j'ai crée une librairie statique avec DevC++ (bizarrement sous Visual C++ ça compile pas correctement).
    Cette librairie contient des classes
    Maintenant je souhaiterais intégrer cette librairie dans un projet MFC pour utiliser ses fonctionnalités dans une interface graphique.
    La question est, comment faire pour que dans visual studio il comprenne que ce sont des classes de ma bibliothque externe que je veux utiliser ?
    J'ai fait ceci :
    - Ajouter ma librairie aux librairies d'entrée du projet
    - Ajouter le fichier Include de ma librairie dans le projet
    Cependant il me sort des erreurs de link quand je compile ..
    Qu'ai-je oublié ? des exportations ? comment faire ?
    Help !!!
    Merci

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Une bibliothèque statique générée avec Dev-C++ ne sera pas compatible avec VC++. Il faut la compiler avec ce dernier.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Par défaut
    Ca ne change rien avec VC++ lui même..
    Lorsque je crée un projet de librairie statique dans la même solution que le projet MFC, et que je réalise la même manip :
    - Ajouter la librairie aux librairies d'entrée du projet MFC
    - Ajouter le fichier Include de ma librairie dans le projet MFC
    si je fais ceci avec une fonction toute simple ça marche
    si je fais ceci avec une classe il me sort des erreurs de link :
    IPIPOura error LNK2019: symbole externe non résolu "public: __thiscall SocketConnexion::SocketConnexion(void)" (??0SocketConnexion@@QAE@XZ) référencé dans la fonction "public: void __thiscall CIPIPOuraDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CIPIPOuraDlg@@QAEXXZ)
    IPIPOura error LNK2019: symbole externe non résolu "public: __thiscall SocketConnexion::SocketConnexion(void)" (??0SocketConnexion@@QAE@XZ) référencé dans la fonction "bool __cdecl grow_lf70(unsigned int,unsigned int)" (?grow_lf70@@YA_NII@Z)
    Comprends pas ..

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 38
    Par défaut
    Citation Envoyé par Loulou24
    Une bibliothèque statique générée avec Dev-C++ ne sera pas compatible avec VC++. Il faut la compiler avec ce dernier.
    En effet, lorsque tu crées une fonction simple au prototype C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    extern "C" void MaFonction(void);
    Normalement tous les compilateurs C compile ta fonction en lui donnant le nom interne (symbole)
    avec un underscore devant le nom de ta fonction, c'est pour çà que çà marche.

    Par contre, en C++ (et peut-être plus particulièrement en VC++), lorsque tu crées une fonction C++ ou une classe, les nom symboliques des fonctions/méthodes ne respectent une dénomination standard
    Donc une classe compilée en Dev-C++ peut donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class MaClasse
    {
       public:
       void UneMethode();
    }
    En Dev-C++ (j'invente ici des noms)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ?MaClasse_UneMethode_DevC
    et en Visual C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ??MaClasse_UneMethode_VC
    Donc ta classe compilée porte le nom ?MaClasse_UneMethode_DevC en DevC++ par contre le VC va s'attendre à lire un nom symbolique ??MaClasse_UneMethode_VC qui n'existe pas dans ta librairie.

    Voilà pourquoi le Dev-C++ n'est pas compatible avec le VC++[/b]

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Par défaut
    Oui je connaissais le point de détail dont tu parles que l'on appelle aussi "decorated name"... le souci est le même quand on crée une DLL il faut utiliser un fichier def pour spécifier nos propres noms ...
    Mais bon ce qui est bizarre c'est que le même fichier source utilisé dans Visual C++ et compilé en tant que librairie statique ne fonctionne plus une fois lié ... (Link error) ...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Par défaut
    Bon je vais clarifier un peu les choses quand même :
    Voilà exactement ce que j'essaye de faire :
    Au départ je voulais créer un projet avec wxWidgets pour faire une appli multi plateforme... Et puis je me suis rendu compte que le rendu graphique est moyen avec cette librairie...
    Mais j'avais déjà fait toutes les classes techniques internes avec wxWidgets et ça fonctionnait très bien...
    Alors je me suis dit : bon ben je vais garder ces classes faites avec wxWidgets et faire une interface graphique avec Visual Studio en liant statiquement l'appli MFC à ma bibliothèque de classes. (quitte à refaire l'interface graphique uniquement sur chaque plateforme, pas de problème)
    Or problème, si la librairie compile très bien en elle même, dès lors qu'on rajoute le fichier d'include de cette même bibliothèque dans le projet MFC les ennuis commencent.
    Alors je m'amuse à configurer tout le projet jusqu'à ce qu'il soit adapté à wxWidgets et apte à pouvoir compiler ... Je croyais enfin toucher au but, mais dernière erreur :
    Un certain fichier de socket de wx ne compile pas... j'en trouve la cause après 2 jours de recherche : winsock.h doit être inclus avant lui ...
    Résolu ? Pas encore, parce qu'en faisant ça, ça me sort une nouvelle erreur : LoadIcon not referenced in TheApp ...
    Enfin bon vous voyez le bordel que c'est pour finalement lier un pauvre truc qui contient des classes faites en wxWidgets avec un projet MFC ...
    C la mouise totale, je pense que je vais carrément essayer de passer par Borland C Builder ...

  7. #7
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Pour exporter des classes entières il faut générer une DLL MFC d'extension et utiliser la macro AFX_EXT_CLASS devant le nom de tes classes

Discussions similaires

  1. Utiliser une bibliothèque statique ?
    Par divide dans le forum Débuter
    Réponses: 1
    Dernier message: 05/12/2012, 14h25
  2. Réponses: 15
    Dernier message: 15/03/2010, 20h01
  3. Problème de lien avec une bibliothèque statique
    Par streetpc dans le forum C++/CLI
    Réponses: 2
    Dernier message: 28/10/2006, 17h38
  4. Réponses: 2
    Dernier message: 02/05/2006, 14h34
  5. utiliser une bibliothèque....
    Par miminou dans le forum Bibliothèques
    Réponses: 5
    Dernier message: 18/12/2005, 20h26

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