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 :

Redirection clog librairie tierce


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Par défaut Redirection clog librairie tierce
    Bonjour,

    J'ai vu pas mal d'info expliquant comment rediriger un flux de sortie (cout / cerr / clog) dans un autre flux (fichier par exemple).

    Seulement la méthodes que j'ai trouvée ne fonctionne pas dans le cas où les sorties se font dans une DLL tierce utilisée par mon application ...

    Disons que j'ai mon projet VC ++ avec mes classes, une référence vers les .h de ma librairie tierce et le .lib de la librairie en question.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <malib/classe1.h>
    int main ()
    {
        std::ofstream Out("C:/test.txt");
        std::streambuf* OldBuf = std::clog.rdbuf(Out.rdbuf());
     
        std::clog << "Affichage dans le fichier, super !" << std::endl;
        classe1 c;
        c.sayHello();
        return 1;
    }
    le "hello world" qu'affiche sayHello() se fait dans la console et non dans mon fichier.
    C'est exemple est simpliste, et même si j'ai les sources de ma librairie tierce je me vois mal re-modifier la brouette de classes pour rediriger chaque méthode faisant des clog ...

    Est-ce qu'il existe un moyen de rediriger les sorties (clog, cerr et cout) sans modifier cette librairie ?

    merci

  2. #2
    Membre très actif Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Par défaut
    Bon, pas sûr que cela réponde à la question...
    As-tu tout linké avec le même CRT ? Il faudrait, je pense, que tu compiles et link tout avec /MD (ou /MDd)

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Par défaut
    Ah oui, effectivement
    le projet "malib" était bien compilé avec l'option /MD mais pas le projet qui l'appelait.
    J'ai changé ça et du coup ça fonctionne

    Seul élément étrange (pas dans cet exemple simpliste mais dans la vrai application), c'est que j'ai dû remettre clog à son flux d'origine sans quoi j'avais un access violation une fois que je sortais du scope de la fonction main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <malib/classe1.h>
    int main ()
    {
        std::ofstream Out("C:/test.txt");
        std::streambuf* OldBuf = std::clog.rdbuf(Out.rdbuf());
     
        std::clog << "Affichage dans le fichier, super !" << std::endl;
        classe1 c;
        c.sayHello();
        std::clog.rdbuf(OldBuf); // <-- retour à son flux de départ
        return 1;
    }
    Le fait qu'un message "destroyed singleton" apparaisse après, me fait dire qu'il doit y avoir un clog dans le destructeur d'un des objet de ma librairie.
    Ce destructeur étant appelé après que mon stream ait lui même déjà été détruit sans doutes.

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

Discussions similaires

  1. Utiliser une librairie tierce, acte 2 (ini4j)
    Par bmayer dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 08/03/2013, 15h36
  2. Utiliser une librairie tierce (ini4j)
    Par bmayer dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 03/03/2013, 20h13
  3. Xcode, Makefiles et librairies tierces
    Par OhLiberties dans le forum XCode
    Réponses: 5
    Dernier message: 11/08/2010, 17h42
  4. Réponses: 1
    Dernier message: 28/05/2007, 00h22

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