Votre question

Visibilité de variable en C++

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
12 Février 2010 16:35:44

Bonjour,

Je suis confronté à un problème dans un petit programme en C++.

Ce programme est une DLL, qui va donc être chargée, et certaine de ses fonctions vont être appelées en externe par mon autre programme.

Voici un court extrait du code :

  1. #include <string>
  2. #include <fstream>
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. static ofstream fichier;
  7.  
  8.  
  9. BOOL APIENTRY DllMain (HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
  10.  
  11.  
  12. ofstream fichier("GpibTrace.log", ios::out | ios::trunc);
  13. fichier << "TEXTE\n";
  14.  
  15. return true;
  16. }
  17.  
  18. JNIEXPORT jint JNICALL Java_berline_busDriver_implementation_GpibDriver_ibdev (JNIEnv *, jclass, jint bdIndx, jint pad) {
  19.  
  20. fichier << "Initializing device card " << bdIndx << ", device address " << pad << "\n";
  21. fichier.flush();
  22. return ibdev(bdIndx, pad, NO_SAD, T10s, 1, 0);
  23. }


La première fonction est une fonction type de DLL, elle est exécutée automatiquement au moment du chargement.

La seconde fonction est une des fonctions que mon programme va avoir besoin d'appeler.

Problème :
Mon flux de sortie pour l'écriture dans le fichier "GpibTrace.log" est déclaré pour tout le monde, mais affecté dans la première fonction. Cela signifie qu'à la fin de l'accolade fermante, la référence est 'détruite' ou je ne sais quoi, et du coup, quand mon programme va appeler la fonction n°2, rien ne sera écrit dans le fichier.

Je me retrouve donc avec un fichier "GpibTrace.log" qui contient uniquement "TEXTE\n".

Comment dois-je m'y prendre pour que ma seconde fonction puisse érire dans le fichier initialisé dans la première fonction ?

Merci de votre aide,

Minimus.

Autres pages sur : visibilite variable

a b L Programmation
12 Février 2010 19:59:08

  1. ofstream fichier("GpibTrace.log", ios::out | ios::trunc);

Ici tu déclares une nouvelle variable locale fichier, qui n'est pas la même que la variable globale fichier.

Donc, n'instancie pas un second objet "fichier", utilise le même. Du coup, il ne faut pas utiliser le constructeur pour ouvrir le fichier, mais utiliser la méthode fichier.open("GpibTrace.log", ios::o ut | ios::trunc).
m
0
l
12 Février 2010 23:44:11

Encore une fois, je sens que tu vas me retirer une sacré épine du pied, CRicky ! :) 

Malheureusement, je ne vais pas pouvoir tester cette modification avant 1 semaine, alternance d'ingé oblige :/ 

Je donnerais des nouvelles après le test !
Minimus.
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS