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++/CLI Discussion :

WriteEventLogEntry - Conversion String ^ en PWSTR


Sujet :

C++/CLI

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2010
    Messages
    84
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 84
    Par d�faut WriteEventLogEntry - Conversion String ^ en PWSTR
    Bonjour,

    Je souhaite loger des actions dans le journal de Windows avec WriteEventLogEntry.
    Comment convertir mon message qui est une variable de type String ^ en PWSTR ?

    Merci d'avance

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    String ^ myMessage;
    myMessage = "ERREUR ETAPE 1";
    WriteEventLogEntry(myMessage, EVENTLOG_INFORMATION_TYPE);
    Erreur 6 error C2664: impossible de convertir le param�tre 1 de 'System::String ^' en 'PWSTR'

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    PtrToStringChars() devrait te donner un pin_ptr<wchar_t> implicitement convertible en LPCWSTR, quelle que soit ta version de Visual Studio.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2010
    Messages
    84
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 84
    Par d�faut
    Merci !

    Mais j'ai toujours le soucis :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    String ^ message = "test" ;
    WriteEventLogEntry(PtrToStringChars(message), EVENTLOG_INFORMATION_TYPE);
    me donne toujours impossible de convertir le param�tre 1 de 'cli::interior_ptr<Type>' en 'PWSTR'

  4. #4
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Ah, je m'�tais donc tromp�, il donne un interior_ptr<>, il faut donc explicitement passer par un pin_ptr<>.

    Essaie ceci:
    Code C++/CLI : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    String ^ message = "test" ;
    { //pour de bonnes perfs, un pin_ptr doit avoir une durée de vie la plus courte possible
    	pin_ptr<wchar_t> pinW(( PtrToStringChars(message) ));
    	WriteEventLogEntry(pinW, EVENTLOG_INFORMATION_TYPE);
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2010
    Messages
    84
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 84
    Par d�faut
    Merci, mais toujours le message : Erreur 6 error C2440: 'initialisation'*: impossible de convertir de 'cli::interior_ptr<Type>' en 'cli::pin_ptr<Type>'

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Alors cette fois-ci, je fais vraiment de la recherche plut�t que bosser de m�moire, parce que de m�moire, c'�tait cens� marcher.

    Et en regardant dans du code � moi, je tombe sur ceci:
    Code C++/CLI : S�lectionner tout - Visualiser dans une fen�tre � part
    	pin_ptr< const wchar_t > pinNameW = PtrToStringChars(name);
    Ce qui veut donc dire que �a ne marche qu'en const.

    Essaie de corriger le code de WriteEventLogEntry() pour accepter un pointeur const (LPCWSTR), car je suis 100% certain que cette fonction n'est pas cens�e modifier la cha�ne re�ue en param�tre.
    ...Ou au pire, utilise un const_cast<> :aie:
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2010
    Messages
    84
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 84
    Par d�faut
    Merci pour ton aide.
    Aurais-tu un autre moyen d'�crire une variable de type String ^ � partir d'un service dans le journal deWindows ?

  8. #8
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    L'autre moyen, c'est le Marshal::StringToHGlobalUni() puis Marshal::FreeHGlobal(),
    et � partir de .net 4.0, l'autre autre moyen, c'est marshal_as<wchar_t *>, qui n�cessite les bons headers.
    Ces deux m�thodes font une copie de la string au lieu de lire directement les caract�res qui s'y trouvent.

    Par curiosit�, peux-tu poster le code source de WriteEventLogEntry()? Car apparemment ce n'est pas une fonction standard de Windows.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2010
    Messages
    84
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 84
    Par d�faut
    Voici la fonction :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    //
    //   FUNCTION: CServiceBase::WriteEventLogEntry(PWSTR, WORD)
    //
    //   PURPOSE: Log a message to the Application event log.
    //
    //   PARAMETERS:
    //   * pszMessage - string message to be logged.
    //   * wType - the type of event to be logged. The parameter can be one of 
    //     the following values.
    //
    //     EVENTLOG_SUCCESS
    //     EVENTLOG_AUDIT_FAILURE
    //     EVENTLOG_AUDIT_SUCCESS
    //     EVENTLOG_ERROR_TYPE
    //     EVENTLOG_INFORMATION_TYPE
    //     EVENTLOG_WARNING_TYPE
    //
    void CServiceBase::WriteEventLogEntry(PWSTR pszMessage, WORD wType)
    {
        HANDLE hEventSource = NULL;
        LPCWSTR lpszStrings[2] = { NULL, NULL };
     
        hEventSource = RegisterEventSource(NULL, m_name);
        if (hEventSource)
        {
            lpszStrings[0] = m_name;
            lpszStrings[1] = pszMessage;
     
            ReportEvent(hEventSource,  // Event log handle
                wType,                 // Event type
                0,                     // Event category
                0,                     // Event identifier
                NULL,                  // No security identifier
                2,                     // Size of lpszStrings array
                0,                     // No binary data
                lpszStrings,           // Array of strings
                NULL                   // No binary data
                );
     
            DeregisterEventSource(hEventSource);
        }
    }

    Pour �crirer dans les logs de Windows, je suis en train d'essayer avec la class EventLog.
    Mais l� aussi j'ai quelques soucis car je n'arrive pas � cr�er un journal...

  10. #10
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Si j'en crois �a, il n'y a donc AUCUNE raison d'avoir pszMessage en PWSTR au lieu de LPCWSTR.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. conversion string--> blob
    Par zimzoum10 dans le forum D�buter
    R�ponses: 13
    Dernier message: 23/02/2005, 16h41
  2. [Conversion] String en InputStream
    Par canou94 dans le forum Langage
    R�ponses: 5
    Dernier message: 22/02/2005, 15h04
  3. [CONVERSION] String -> HEXADECIMAL ...
    Par tripop dans le forum Langage
    R�ponses: 9
    Dernier message: 13/01/2005, 09h42
  4. conversion String en Date (parse trop permissif)
    Par ciloulou dans le forum Collection et Stream
    R�ponses: 2
    Dernier message: 13/09/2004, 18h36
  5. [FLASH MX 2004] conversion string en int.
    Par calfater dans le forum Flash
    R�ponses: 3
    Dernier message: 26/05/2004, 15h00

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