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

Bibliothèques Discussion :

DLL et fichier ouvert (badbit)


Sujet :

Bibliothèques

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut DLL et fichier ouvert (badbit)
    Bonjour,

    ca fait un moment que je ne suis pas venu sur le forum, c'a me fait tout drole

    Voici mon problème :
    Dans une dll, j'ai fait une class du 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
    class _DLL_EXPORT maClass{
    public :
       maClass& getSingelton()
       {
          maClass singleton;
          return singleton;
       }
     
    private:
       maClass()
       {
          m_file.open("test", ios::trunc);
          m_file.exceptions (ios::failbit | ios::badbit);
          m_file << "ouverture" << endl;
       }
       ~maClass()
       {
          m_file << "fermeture" << endl;
          m_file.close();
       }
    private:
       ofstream m_file;
    };

    Donc je compile ca en librairie, tous ce passe bien.

    Je créer un nouveau prjet pour tester qui ressemble a ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main (int argc, char *argv[])
    {
        maClass::getSingleton();
        return 0;
    }

    Donc j'ai linker ma librairie, inclue les includes et je compile, tous ce passe bien.

    Quand j'execute le fichier exe généré, j'ai un code retour "03". En cherchant un peu, je vois que le fichier test est bien créer mais qu'il contient seulement "ouverture".
    J'ai executer le programme en "debug" et ca plante sur "m_file << "fermeture" << endl;" car a priori le fichier est déjà fermé. Cepandant m_file se comporte comme si il était encore ouvert (j'ai testé avec "m_file.is_open()" juste avant le plantage et sa retourne "true".
    Je pense que ca vient du dechargement automatique de la DLL mais je n'en suis pas sur et surtout je ne sais pas comment contourner ce problème.
    Vos avis, confirmation piste de correction ou même correctif dont les bienvenue.

    Merci d'avance
    A+

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    L'utilisation de la libc durant le déchargement d'une dll est fortement déconseillé. C'est la libc qui est utilisé dans les streams et dans les destructeurs (via delete).

    Je vous conseil de faire appel au destructeur avant le déchargement de le dll, via une fonction exportée par la dll par exemple.

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    merci de ta réponse mais j'appréciait enormement le fait de ne pas m'occuper de la destruction de mon objet (d'ailleur dans la réalité, je n'utilise jamais directement mon objet (cad je ne le créer pas volontairement) car j'ai un define sur ... new et delete). N'y a t il pas une autre solution (l'utilisation d'un "FILE*" posera le même problème qu'un ofstream?).

    Sinon question complémentaire, comment supprimer un objet (appeler son destructeur) que j'e n'ai pas "allouer" car la je ne fait pas de new donc pas possible de faire un delete (ou alors en passant l'adresse de mon objet ca fonctionne?).

    Merci
    A+

Discussions similaires

  1. [VBA][Office 2003] Fichier ouvert depuis IE ou Word?
    Par nbaudraz dans le forum VBA Word
    Réponses: 2
    Dernier message: 12/10/2005, 14h27
  2. tester si fichier ouvert
    Par nbelg27 dans le forum Access
    Réponses: 6
    Dernier message: 08/09/2005, 10h19
  3. Réponses: 5
    Dernier message: 13/05/2005, 12h26
  4. Nombre maximum de fichiers ouverts par processus
    Par galinoo dans le forum Windows
    Réponses: 3
    Dernier message: 27/10/2004, 17h47
  5. Nombre de fichiers ouverts simultanément
    Par matrixfan dans le forum C++Builder
    Réponses: 3
    Dernier message: 27/05/2002, 17h47

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