none
Partage des variables stdin, stdout et stderr entre un exécutable et une DLL RRS feed

  • Question

  • Bonjour,

     

    Je voudrais pouvoir utiliser une unique définition de 'stdout' pour mon exécutable et ma DLL.

    Mais je n'ai pas trouvé la solution...

     

    J'ai dans un exécutable un appel à une fonction de messages de log en donnant le flux où je veux les faire afficher :

     

    [...]

    log(stdout, "Mon message");

    [...]

     

    Cette fonction log() est définie dans une DLL et appelle vfprintf() sur le flux donné :

     

    void log(FILE *f, char *format, ...) {

      [...]

      vfprintf(f, ...)

      [...]

    }

     

    Cela plante au niveau du vfprintf() car f (qui correspond au stdout de l'exécutable) ne fait pas partie des flux initialisés au niveau de la DLL.

    Il me semble donc que la solution serait que ma DLL et mon exécutable partagent le même tableau de flux mais comment faire ?

    J'ai essayé de compiler la DLL avec /MD ou /MDd mais ça ne change rien.

     

    Une idée ?

     

    Stéphane

     

    mardi 4 mars 2008 17:57

Réponses

  • salut,
    déjà commence par t'assurer que ton programme et ta dll utilise la bibliothèque CRT de la même manière ,
    c'est à dire en mode DLL multithread (/MD) ou en Multithread (/MT). (en release)
    après si tu passes le flux en argument dans une fonction de ta DLL ça devrait fonctionner.

    Dans ton poste tu parles /MD et /MDd Mdd c'est multithread en mode debug.
    mélanger du debug et release ne fait pas bon ménage.


    jeudi 6 mars 2008 11:57
  • Bonjour Fanou,

    MT=multithread avec utilisation de la version statique de la CRT

    MD=multithread avec utilisation de la version dynamique de la CRT

    ensuite MDd et MTd =debug

    Il est préferable bien sur de ne pas mixer release et debug.

     

    cordialement

    Michel4CE

    dimanche 30 mars 2008 16:06

Toutes les réponses

  • salut,
    déjà commence par t'assurer que ton programme et ta dll utilise la bibliothèque CRT de la même manière ,
    c'est à dire en mode DLL multithread (/MD) ou en Multithread (/MT). (en release)
    après si tu passes le flux en argument dans une fonction de ta DLL ça devrait fonctionner.

    Dans ton poste tu parles /MD et /MDd Mdd c'est multithread en mode debug.
    mélanger du debug et release ne fait pas bon ménage.


    jeudi 6 mars 2008 11:57
  •  

    Bonjour,

     

    Effectivement, je m'étais dit que /MD, c'était bien pour une DLL et /MT pour un exécutable.

    Je ne suis donc pas sûr d'avoir compris la bonne utilisation des 2. Et en lisant la doc, ça ne s'arrange pas...

    Quelqu'un aurait sur le sujet, svp ?

     

    Merci pour l'aide !

     

    lundi 10 mars 2008 17:56
  • Bonjour Fanou,

    MT=multithread avec utilisation de la version statique de la CRT

    MD=multithread avec utilisation de la version dynamique de la CRT

    ensuite MDd et MTd =debug

    Il est préferable bien sur de ne pas mixer release et debug.

     

    cordialement

    Michel4CE

    dimanche 30 mars 2008 16:06