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 :

Pb avec bibliothèque WinLOG


Sujet :

C

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut Pb avec bibliothèque WinLOG
    Bonjour,

    Ceci pour dire que je rencontre un pb avec la bibliothèque WinLOG trouvée ICI et je ne vois pas comment le résoudre.
    Merci pour votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char* BlaBlaBla="Ceci est le contenu de ma variable";
    int Entier="1234";
     
          INFO2("blablabla=%s", BlaBlaBla);
          INFO2("Entier=%d", Entier);
    Ceci affiche bien le message
    blablabla=Ceci est le contenu de ma variable
    Entier=1234
    par contre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char* BlaBlaBla="Ceci est le contenu de ma variable";
    int Entier="1234";
     
          WinLogW(WinLog_Info, WINLOG_LEVEL_04, L"blablabla=%s", BlaBlaBla);
          WinLogW(WinLog_Info, WINLOG_LEVEL_04, L"Entier=%d", Entier);
    Ceci affiche :

    blablabla=
    Entier=1234

    Ceci par contre n'affiche QUE l'entier
    Le pb est que je n'arrive pas à afficher les variables de type chaines de caractères en utilisant la fonction WinLogW.
    Par contre l'affichage d'une chaine de caractère se fait correctement si je n'utilise pas de variable.
    Que faire ?
    Merci pour votre aide.

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    Bonjour,

    J'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WinLogW(WinLog_Info, WINLOG_LEVEL_04, L"blablabla=%s", TEXT(BlaBlaBla));
    Et ça ne change rien
    Ca ne m'affiche que
    blablabla=
    Merci donc pour votre aide.

  3. #3
    Membre expérimenté Avatar de brachior
    Homme Profil pro
    Doctorant
    Inscrit en
    Mai 2011
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 190
    Par défaut
    Pourquoi tu écris "blablabla" alors que ta variable est "BlaBlaBla" ?
    c'est peut être juste une erreur de copier/coller sur le forum ^^'

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    Bien vu
    Je viens donc de corriger sur le forum

  5. #5
    Membre expérimenté Avatar de brachior
    Homme Profil pro
    Doctorant
    Inscrit en
    Mai 2011
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 190
    Par défaut
    En lisant la doc, je dirais que c'est un problème de configuration,
    Parce que, INFO<n> utilise le niveau 0 (WINLOG_LEVEL_00)
    Qui lui ne peut pas être désélectionnée, mais là tu utilise le niveau 4.
    Enfin, c'est bizarre que l'entier fonctionne et pas l'autre Oo

    Mais tu as bien les initialisations pour WinLogSetFeatureLevel ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WinLogSetFeatureLevel(WINLOG_LEVEL_04);

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    C'est déjà étonnant que la sortie soit ici Entier = 1234
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ....
    int Entier="1234";
    ....
          INFO2("Entier=%d", Entier);
    La première ligne devrait donner un warning du compilateur pour une conversion implicite d'un pointeur vers un entier : 1234 est différent de "1234"
    La seconde devrait sortir la valeur de ce pointeur (dans le meilleur des cas).

  7. #7
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    Oups en effet désolé
    En fait l'entier est réellement un entier.
    Là me suis trompé en mettant les guillemets.
    Sinon Entier et blablabla sont des variables et non des constantes

  8. #8
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    En lisant la doc, je dirais que c'est un problème de configuration,
    Parce que, INFO<n> utilise le niveau 0 (WINLOG_LEVEL_00)
    Qui lui ne peut pas être désélectionnée, mais là tu utilise le niveau 4.
    Enfin, c'est bizarre que l'entier fonctionne et pas l'autre Oo

    Mais tu as bien les initialisations pour WinLogSetFeatureLevel ?
    Le but est justement d'utiliser le niveau 4 et non le niveau par défaut.

    Le pb est qu'il n'y a que la chaine de caractère en variable qui ne s'affiche pas. si j'écris "en dur", ca marche mais pas une variable.

    Je pense avoir mis le doigt sur mon pb mais je ne sais pas comment faire pour le résoudre.
    En fait, ma variable est une "char*" avec un malloc()
    et je pense que la fonction WinlogW demande un "wchar_t"
    Comment faire pour modifier celà ?
    Merci

  9. #9
    Membre expérimenté Avatar de brachior
    Homme Profil pro
    Doctorant
    Inscrit en
    Mai 2011
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 190
    Par défaut
    Je viens d'apprendre l'existence de ce type ^^

    Mais en regardant dans le man de stdlib.h j'ai trouvé ça :

    mbstowcs

    Ça pourrait t'être utile ^^

  10. #10
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    Merci pour l'info.
    En effet, cette fonction m'est très utile.
    Voici ce que j'ai maintenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    wchar_t *DateDernierRebootWCHART ;
    DateDernierRebootWCHART=malloc(sizeof(char)*strlen(DateDernierReboot)+1);
    mbstowcs(DateDernierRebootWCHART, DateDernierReboot, strlen(DateDernierReboot)+1);
     
     
          WinLogW(WinLog_Info, WINLOG_LEVEL_03, L"DateDernierReboot=%s", TEXT(DateDernierRebootWCHART));
          WinLogW(WinLog_Info, WINLOG_LEVEL_04, L"NbreCaracteresDateDernierReboot=%d", strlen(DateDernierReboot));
          WinLogW(WinLog_Info, WINLOG_LEVEL_04, L"");
     
    free(DateDernierRebootWCHART);
    DateDernierRebootWCHART=NULL;
    et ceci m'affiche bien correctement le message.
    Si je n'ai pas fait d'erreur ci-dessus, je corrigerai tout mon programme pour utiliser cette fonction.
    Qu'en pensez-vous ?
    Merci encore

  11. #11
    Membre expérimenté Avatar de brachior
    Homme Profil pro
    Doctorant
    Inscrit en
    Mai 2011
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 190
    Par défaut
    Si jamais tu utilises souvent cette fonction
    Et que la taille de DateDernierRebootWCHART est bornée,
    Y a moyen d'éviter un malloc/free à chaque appel ^^

    Et stocke le strlen() dans une variable pour éviter le double calcul ^^

  12. #12
    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 : 62
    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
    Par défaut
    WinLog utilise les formats d'affichage de sprintf().

    Tu peux aussi faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char * toto = "une chaine de caractères"
    
    WinLogW(WinLog_Info, WINLOG_LEVEL_03, L"DateDernierReboot=%S", toto);
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  13. #13
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    HA OK Merci Merci ram-0000
    En effet, il faut juste mettre "%S" à la place de "%s" et là ça corrige mon pb.
    Merci Merci
    C'était vraiment trop simple, mais fallait y penser
    Rien de tel que le développeur lui-même pour indiquer comment corriger le pb

  14. #14
    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 : 62
    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
    Par défaut
    L'utilisation de %S dans le format de message est spécifique je croix à Microsoft.

    Elle permet :
    • pour un format printf spécifié en chaine unicode d'interpréter le paramètre chaine de caractères comme une chaine non unicode

    et/ou
    • pour un format printf spécifié en chaine non unicode d'interpréter le paramètre chaine de caractères comme une chaine unicode

    C'est un format dangereux à utiliser, tu as intérêt à savoir ce que tu fais car sinon, dans quelques mois, tu risques d'oublier et d'avoir des surprises (crash). Un commentaire dans le code s'impose donc

    Autre chose, j'ai failli ne pas voir ton post, tu aurais pu poster dans le thread dédié à Winlog pour au moins dire "j'ai un problème avec Winlog, j'ai ouvert une discussion dédiée à ce problème à cet endroit".
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  15. #15
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    Merci pour ces infos ram-000
    Sinon Je n'avais pas trouvé où poster mon pb.
    Mais maintenant que j'ai l'info je le mets dans mes raccourcis
    Sinon je ne comprends pas ce que tu veux dire, quel pb je pourrais rencontrer ?
    Mon pb récupère toujours les mêmes valeurs (normalement) et donc n'affiche avec WinLog que ce qu'il y a à afficher. WinLog me sert principalement pour le mode DEBUG de mon programme.

  16. #16
    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 : 62
    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
    Par défaut
    Citation Envoyé par Korben-Dallas Voir le message
    Sinon je ne comprends pas ce que tu veux dire, quel pb je pourrais rencontrer ?
    Problème de portabilité

    Visiblement, tu code en Unicode (ce qui est très bien).

    Si un jour tu désirais faire fonctionner ton code en mode MBCS (non UNICODE), tu aurais probablement un problème car le %S implique obligatoirement en MBCS que le paramètre passé au format d'affichage soit un wchar_t * (ce qui ne serait peut être pas le cas) et c'est le genre de problèmes qui conduit au mieux à un affichage farfelu et au pire à un crash très délicat à détecter.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  17. #17
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    Comme je ne suis pas spécialiste, je ne sais pas vraiment si je code en UNICODE ou non. Comment le savoir ?
    En fait, mon programme est simple et ai écrit à la va vite en "pissage de ligne".
    Je ne penses donc pas qu'il soit super bien écrit mais il fait ce pour quoi il a été fait. Enfin j'essaie.
    En tout cas, le but du prog est qu'il doit fonctionner sur Windows XP, 2k, 2k3, 2k8 et Vista et Seven mais surtout sur XP et Seven. D'ailleurs pas encore testé sur Seven.

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

Discussions similaires

  1. problème avec bibliothèque sys
    Par remessa dans le forum Général Python
    Réponses: 4
    Dernier message: 30/11/2008, 22h33
  2. problème avec bibliothéque Gtk
    Par lili81 dans le forum C++Builder
    Réponses: 0
    Dernier message: 22/10/2008, 14h30
  3. Reconnaisance de caractère dans une TextBox avec bibliothèque de mot
    Par moilou2 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 12/09/2008, 18h38
  4. Réponses: 9
    Dernier message: 09/11/2007, 14h46
  5. Réponses: 3
    Dernier message: 10/01/2007, 17h03

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