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

VC++ .NET Discussion :

[Linkage] Ma librairie ne semble pas incluse


Sujet :

VC++ .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    Par défaut [Linkage] Ma librairie ne semble pas incluse
    Bonjour

    Je compile sous VC++ Express un projet qui a besoin de 2 librairies que j'ai préalablement compilé et linké avec succès : cppUnit et une autre de ma composition (microLib.dll et microLib.lib).
    Mais, dans mon projet, malgré les ajouts des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #pragma comment (lib, "microLib.lib")
    Et le fait que j'ai ajouté le path de mes fichiers .lib dans les options de link de VC++ Express, je me prends en masse des erreurs du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    1>StableRegionTest.obj : error LNK2019: unresolved external symbol "public: void __thiscall Spectrum::addPoint(class Dot const &)" (?addPoint@Spectrum@@QAEXABVDot@@@Z) referenced in function "private: void __thiscall StableRegionTest::addPoints(class Spectrum &)" (?addPoints@StableRegionTest@@AAEXAAVSpectrum@@@Z)
    J'ai l'impression que ma librairie n'est pas incluse dans le linkage
    Est-ce cela ? Comment résoudre ce problème ?

    Merci d'avance de vos réponses.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  2. #2
    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
    Je pense que la fonction qui manque (ou la classe qui la contient) n'est pas déclarée en dllimport/dllexport.
    En effet, le nom "décoré" d'une fonction en dllimport commence toujours par __imp...
    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.

  3. #3
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    Par défaut
    Bonjour Medinoc

    Merci de ta réponse. Pardon de poser cette question bête mais autant je compile pratiquement tout le temps en C sous Unix mais sous VC++Express, je suis complètement débutant. Donc, comment effectuer l'opération que tu me préconises ?
    Merci d'avance.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  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
    Si tu as créé ta DLL avec les assistants de Visual, tu as sans doute un fichier d'en-tête définissant une macro NOMDELADLL_API qui vaut soit __declspec(dllexport), soit __declspec(dllimport).

    Il faut alors que tu précèdes la déclaration de ta classe de cette macro, et que tu recompiles la DLL et ton programme.
    J'utilise peu le C++ dans les DLL, mais ça devrait marcher.
    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 expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    Par défaut
    Et dans le cas contraire ?
    Parce que je n'ai pas utilisé d'assistant pour faire tout ça.
    Dieu que Visual C++ Express est compliqué à appréhender !
    Je te remercie encore de ton aide Medinoc.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  6. #6
    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
    Dans ce cas, écrit un fichier d'en-tête de ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    /*
    NomDeLaDll.h
    */
    #ifndef H_NOMDELADLL
    #define H_NOMDELADLL
     
    /* extern "C" : Pour les fonctions C et C++ accessibles dans les deux langages */
    #ifndef EXTERN_C
    #ifdef __cplusplus
    #define EXTERN_C extern "C"
    #else
    #define EXTERN_C extern
    #endif
    #endif
     
    /* NOMDELADLL_API : Pour dllimport/export */
    #ifdef BUILDING_NOMDELADLL
    #define NOMDELADLL_API __declspec(dllexport)
    #else
    #define NOMDELADLL_API __declspec(dllimport)
    #endif
     
    #endif /* ! H_NOMDELADLL */
    Ce fichier est comme celui généré de base par Visual, mais avec la macro EXTERN_C en plus, car elle est pratique.

    Ensuite, tu n'as plus qu'à déclarer les fonctions et classes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    /*
    ClasseSpectrum.hpp
    */
    #ifndef __cplusplus
    #error This file is for C++ only
    #endif
     
    #ifndef H_CLASSESPECTRUM
    #define H_CLASSESPECTRUM
     
    #include "NomDeLaDll.h"
     
    class NOMDELADLL_API Spectrum
    {
    public:
        void addPoint(Dot const &);
    };
     
    #endif // H_CLASSESPECTRUM
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /*
    Fonctions .h
    */
    #include "NomDeLaDll.h
     
    #ifndef H_FONCTIONS
    #define H_FONCTIONS
     
    EXTERN_C NOMDELADLL_API int __stdcall UneFonction(char const *);
    EXTERN_C NOMDELADLL_API double __stdcall UneAutreFonction(int);
     
    #endif /* ! H_FONCTIONS */
    Cela devrait suffire. Si ce n'est pas suffisant, il faudra ajouter NOMDELADLL_API devant chaque définition de fonction dans le .cpp (mais je ne crois pas que ce soit nécessaire).

    À présent, le tour de magie:
    Dans les options du projet de ta DLL, tu ajoutes dans "preprocessor definitions" la macro BUILDING_NOMDELADLL (et uniquement dans ce projet-là!). Ainsi, les classes et fonctions exportées seront déclarées en dllexport dans la DLL et en dllimport partout ailleurs.
    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.

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

Discussions similaires

  1. Ma table temporaire ne semble pas fonctionner.
    Par outshined dans le forum Requêtes
    Réponses: 2
    Dernier message: 12/09/2006, 14h40
  2. [SQL] La valeur d'une variable ne semble pas être prise en compte
    Par oroumgolok dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 03/09/2006, 23h31
  3. [MySQL] ORDER BY qui ne semble pas pris en compte
    Par yongblood dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/03/2006, 12h53
  4. librairie introuvable! Erreur"Pas d'objet dans ce contr
    Par vins111282 dans le forum Access
    Réponses: 5
    Dernier message: 16/05/2005, 14h07
  5. inclus ou pas inclus dans delphi 2005
    Par lopezpacheco dans le forum Débuter
    Réponses: 4
    Dernier message: 11/02/2005, 00h43

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