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 :

afficher les messages printf depuis une dll


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Points : 8
    Points
    8
    Par défaut afficher les messages printf depuis une dll
    Bonjour,

    Je dois utiliser une bibliothèque de fonctions, dont j'aimerai ne pas avoir à modifier (trop) le code.
    Ce code contient des printf, indiquant l'état de la fonction.
    Je compile cette bibliothèque dans un projet dll avec visualC2005 sous devcpp.

    Je voudrais récupérer les messages des printf dans une console quelconque.

    Est ce possible ? (fonction launch_console() ? - option de compilation console = 1 ... ca serait beau ... )
    Comment dois-je procéder ?

    Merci

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Mon avis sur ce problème:
    D'abord tu vas probablement être obligé de modifier le code de ta librairie afin que tous les printf de ta librairie passe par une seule fonction de ta librairie MonPrintf() et pour cela tu remplace printf par MonPrintf (search and replace facile)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void MonPrintf(const char *Format, ...)
    {
    ...
    }
    Ensuite, je pense que le contexte d'affichage n'est pas du ressort de la librairie mais plutot du programme qui utilise cette librairie. C'est donc au programme utilisateur d'afficher ce que la librairie voudrait afficher.
    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
    24
    25
    26
    27
    28
     
    // dans un include
    // PrintfCallback_t est un pointeur de fonction qui attend la chaine de caractères à afficher et qui ne retourne rien
    typedef void (*PrintfCallback_t)(const char *Texte);
    extern void SetPrintfCallback(PrintfCallback_t Fct);
    extern void MonPrintf(const char *Format, ...);
     
     
    // dans un source
    static PrintfCallback_t FctCallback = NULL;
    void SetPrintfCallback(PrintfCallback_t Fct)
    {
       FctCallback = Fct;
    }
     
    void MonPrintf(const char *Format, ...)
    {
       // construit le buffer à afficher
    char buffer[4096];
       snprintf(...)
     
       // appel de la fonction callback
       if(FctCallback != NULL)
          FctCallback(buffer);
     
       // affichage par printf classique si necessaire
       printf(buffer);
    }
    Ensuite dans le code de ton application, tu dois écrire ta fonction de traitement callback

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void MonCallback(const char *Texte)
    {
    ...
    }
    et enfin en tout début de ta fonction main(), tu positionne le callback
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int main(const int argc, char **argv)
    {
       SetPrintfCallback(MonCallback);
    ...
    }

    Ainsi avec ce code, le programme utilisateur peut afficher le texte dans sa console ou même le mettre dans une listbox ou tout autre chose. Encore une fois, c'est de la responsabilité de l'application utilisatrice.

    Cette démarche est une approche plutôt orientée C. Je laisse la traduction en POO aux adeptes du C++ pur et dur, c'est pas trop mon domaine.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Points : 8
    Points
    8
    Par défaut
    Merci,

    En effet, je comprend bien la logique "ça n'est pas la travail de la librairie que de gérer l'affichage".

    Mon application-hôte dispose de ressources pour afficher des retours-console, mais il faut effectivement faire transiter un pointeur vers celle-ci.

    La méthode que tu me décris est à retenir, comme "méthode générale", néanmoins, ma question portait sur une méthode plus simple, si tant-est qu'elle existe.

Discussions similaires

  1. Afficher les messages d'erreur dans une JOptionPane
    Par nassima_1418 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 24/10/2013, 15h23
  2. lire et afficher le jpg depuis une dll !
    Par cincap dans le forum Débuter
    Réponses: 11
    Dernier message: 29/03/2010, 11h18
  3. Afficher une fenêtre depuis une DLL
    Par swayvill dans le forum VC++ .NET
    Réponses: 3
    Dernier message: 05/04/2007, 19h14
  4. Afficher une fenêtre depuis une DLL
    Par swayvill dans le forum C++
    Réponses: 1
    Dernier message: 07/01/2007, 16h43
  5. Réponses: 2
    Dernier message: 27/09/2006, 11h35

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