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+
Partager