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 :

Singleton dans dll ?


Sujet :

VC++ .NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 41
    Points : 31
    Points
    31
    Par défaut Singleton dans dll ?
    Bonjour,

    J'essaie de faire un singleton sous visual c++ dans une dll, qui est appelé par d'autres dll de mon programme.

    Le projet seul compile parfaitement, mais au moment de la compilation de la solution complète c'est le drame !
    Des erreurs à gogo concernant particulièrement ma référence d'objet static.

    Imaginon mon singleton avec cett classe Lapin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class AFX_EXT_CLASS Lapin
    {
         public :
         static Lapin* getInstance();
     
         private :
         Lapin();
         static reference Lapin*;
    }
     
    Lapin* Lapin::reference = NULL;
    J'ai donc beaucoup de messages d'erreur du type :

    error C2491 :'Lapin::reference" : définitionde dllimport données membres static non autorisée
    chacune suivie de

    fatal error C1903: impossible de récupérer à partir des erreurs précédentes; arrêt de la compilation
    Aussi quelques :

    error LNK2005: "public: static class Lapin * Lapin::reference" (?ref@Lapin@2PAV1@A) déjà défini(e) dans NomDuneAutreDLL.obj
    Et puis aussi ...

    fatal error LNK1169: un ou plusieurs symboles définis à différentes reprises ont été rencontrés.

    Et un petit packet de warning du genre :

    Warning C2473: "referenceé : liaison DLL incohérente

    Je suis complètement largué par ces erreurs. Est-il au moins possible d'utiliser des variables static dans des dll ?

    Bref, si quelqu'un a une idée je suis preneur !

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    (Merci buns pour la mise en forme, je tâcherais de m'en souvenir)

    J'ai contourné le problème en remplaçant ma variable de classe static par une variable globale, mais ça ne m'enchante pas vraiment.

    Disons que c'est une solution intermédiaire en attendant !

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Un truc du genre manquerait-il ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    __cdecl(dllimport) Lapin* Lapin::reference = NULL;

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

Discussions similaires

  1. Singleton dans une DLL
    Par mister3957 dans le forum C++
    Réponses: 9
    Dernier message: 24/03/2009, 10h01
  2. Pb curseur dans DLL
    Par dede92 dans le forum Windows
    Réponses: 5
    Dernier message: 16/03/2005, 12h15
  3. PB pour Appel fonction dans DLL sur Builder3
    Par Fbartolo dans le forum C++Builder
    Réponses: 15
    Dernier message: 10/03/2005, 12h58
  4. gestionnaire d'Exception dans DLL
    Par pirbd dans le forum Langage
    Réponses: 2
    Dernier message: 03/03/2005, 18h58
  5. Réponses: 5
    Dernier message: 11/02/2005, 16h52

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