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 :

__declspec(dllexport) et membres


Sujet :

C++

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut __declspec(dllexport) et membres
    Bonjour à tous,


    je suis en train de faire une DLL et certaines classes ont besoin d'être visible dans le projet utilisateur, je mets alors des __declspec(dllexport) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class __declspec(dllexport) CMyClass
    {
    private:
        std::vector m_vecDatas;
    };
    Mais le compilateur me lance des warnings en me disant que std::vector doit également avec une interface DLL (warning C4251).

    Qu'est-ce que je dois faire pour régler ça ?


    Merci,

    A bientôt
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Plusieurs solutions :
    1- Désactiver le warning (ça fonctionnera de toute façon)
    2- Exporter explicitement toutes les instanciations de std::vector que tu utilises dans tes classes exportées (trouver une bonne doc pour la syntaxe exacte, perso je ne m'en rappelle jamais)
    3- Cacher ton membre std::vector afin qu'il ne soit pas visible dans ta classe exportée (voir pimpl idiom -- idiome intéressant qui a d'autres avantages)

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Merci Laurent

    J'ai désactivé le warning, ça passe

    A bientôt
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Le warning a une utilité:

    Ca passe jusqu'à ce que la STL utilisée par le programme principal ne corresponde pas (plus) à celle de ta DLL (en tout cas pour cette implémentation).

    Il vaut mieux (à mon avis) faire un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    template __declspec(dllexport) std::vector<MonType>
    Ou encore mieux... Cacher l'implémentation de ton objet...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ca passe jusqu'à ce que la STL utilisée par le programme principal ne corresponde pas (plus) à celle de ta DLL (en tout cas pour cette implémentation)
    En quoi est-ce que ça règlera le problème si les données membres de std::vector ne correspondent pas à la version compilée de la DLL ?

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Intéressant article à ce sujet :
    http://www.unknownroad.com/rtfm/Visu...ningC4251.html

  7. #7
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Laurent Gomila Voir le message
    En quoi est-ce que ça règlera le problème si les données membres de std::vector ne correspondent pas à la version compilée de la DLL ?
    ????

    Je dis juste que si l'implémentation change, la version DLL compilée ne correspondra plus aux headers .
    Donc la suppression du warning est dangereuse...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. Réponses: 11
    Dernier message: 06/11/2008, 09h49
  2. static et __declspec(dllexport)
    Par squale69 dans le forum Visual C++
    Réponses: 2
    Dernier message: 16/05/2008, 00h01
  3. template et __declspec(dllexport)
    Par mister3957 dans le forum Langage
    Réponses: 15
    Dernier message: 14/03/2008, 08h45
  4. template et __declspec(dllexport) : LNK2019
    Par mister3957 dans le forum Langage
    Réponses: 14
    Dernier message: 04/01/2008, 10h43
  5. __declspec(dllexport) dans mon fichier header mais...?
    Par Jasmine dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 03/03/2004, 18h00

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