begin process at 2012 05 29 11:56:35
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

System

 > 

FormatMessage


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

FormatMessage

vendredi 5 juin 2009 à 14:04:17 | FormatMessage

sphinx2

Bonjour,
J'essaie d'appeler FormatMessage sous visual studio C++ 2008 en Windows forms donc en C++ "managé".
Mon code est celui-c mais ne compile pas: voir Error dans les commentaires du code
============================================================
#include "StdAfx.h"
#include <windows.h>
#include <tchar.h>
#include <strsafe.h>
#include "Constants.h"
#include "manageDateFile.h"
#using <mscorlib.dll>
#using <System.dll>
using namespace System::Diagnostics ;
using namespace System::Text;
using namespace System::Collections;
using namespace System::Runtime::InteropServices;

[DllImport("kernel32.dll", CharSet=System::Runtime::InteropServices::CharSet::Auto)]
int FormatMessage(int dwFlags,
  IntPtr *lpSource,
  int dwMessageId,
  StringBuilder lpBuffer,
  int dwLanguageId,
  int nSize,
  IntPtr *Arguments);


// Constructor
manageDateFile::manageDateFile(bool _fDebug){
fDebug = _fDebug;
}

// Show the mesage for last Error error
void manageDateFile::showLE(String^ lpszFunction, DWORD dw)
{
// Retrieve the system error messa ge for the last-error code

int messageSize  = 255;
    String^ lpMsgBuf = "";
    int dwFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS;

    IntPtr ptrlpSource  = IntPtr::Zero;
    IntPtr prtArguments = IntPtr::Zero;

    int retVal = FormatMessage(
dwFlags,
&ptrlpSource,
dw,
0,
&lpMsgBuf,
messageSize,
&prtArguments);  //<-----Error 1 error C2665: 'FormatMessage' : none of the 2 overloads could convert all the argument types v:\dev\cpp\ChgDate\ChgDate\manageDateFile.cpp 48 ChgDate


/*

    // Display the error message
// Manage
String^ dispMsg;
StringCchPrintf((LPTSTR)lpDisplayBuf,
        LocalSize(lpDisplayBuf) / sizeof(TCHAR),
        TEXT("%s failed with error %d: %s"),
        lpszFunction, dw, lpMsgBuf);
    Debug::WriteLine((LPCTSTR)lpDisplayBuf);

    LocalFree(lpMsgBuf);
*/
}

============================================================

Avez vous un exemple qui fonctionne?
Merci par avance.
samedi 6 juin 2009 à 14:26:01 | Re : FormatMessage

rt15

Membre Club Administrateur CodeS-SourceS
Salut,

Peut être le StringBuilder/String^ ?

Aide sur le pinvoke de FormatMessage. Ils proposent une alternative d'ailleurs.
lundi 8 juin 2009 à 07:39:26 | Re : FormatMessage

sphinx2

Bonjour,
J'ai finalement trouvé une solution
La voici:
#include "StdAfx.h"
#include <windows.h>
#include <tchar.h>
#include <strsafe.h>
#include "Constants.h"
#include "manageDateFile.h"
#using <mscorlib.dll>
#using <System.dll>
using namespace System::Diagnostics ;
using namespace System::Text;
using namespace System::Collections;
using namespace System;
using namespace System::Runtime::InteropServices;

// Fonctionne
[DllImport("kernel32.dll", CharSet=System::Runtime::InteropServices::CharSet::Auto)]
int LocalFree(System::IntPtr
);
                        [DllImport("user32.dll", CharSet=System::Runtime::InteropServices::CharSet::Auto)]
int MessageBox(IntPtr, StringBuilder^ text, String^ caption, unsigned int type);

[DllImport("kernel32.dll", CharSet=System::Runtime::InteropServices::CharSet::Auto)]
int FormatMessage(
                    int        dwFlags,
                    System::IntPtr* lpSource,
                    int        dwMessageId,
                    int        dwLanguageId,
                    System::IntPtr* lpMsgBuf,
                    int        nSize,
                    System::IntPtr);

// Constructor
manageDateFile::manageDateFile(bool _fDebug){
    fDebug = _fDebug;
}
// Show the mesage for last Error error
void manageDateFile::showLE(String^ myMessage, DWORD dw)
{
    // Retrieve the system error message for the last-error code
    IntPtr lpMsgBuf      = IntPtr::Zero;
    IntPtr ptrlpSource   = IntPtr::Zero;
    StringBuilder^ text  = gcnew StringBuilder;
  
    int retVal = FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
        &ptrlpSource,
        dw,                // Message ID
        MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),                    // LANG
        &lpMsgBuf,
        255,
        IntPtr::Zero); // &prtArguments);
    String^ textMsg =System::Runtime::InteropServices::Marshal::PtrToStringAuto(lpMsgBuf);
    text->AppendFormat("sys message = {0}, Code = {1}, in {2]", textMsg, dw, myMessage);
        MessageBox(IntPtr::Zero, text, "SYSTEM ERROR",  1);
        // Free the pointer
    LocalFree(lpMsgBuf);
}



Cette discussion est classée dans : int, system, include, using, error


Répondre à ce message

Sujets en rapport avec ce message

Problème incompréhensible [ par JosueClement ] Regardez plutot...Ce programme est une sorte d'horloge!Il n'y a aucune erreur de compilation, mais les heures n'augmentent jamais!!A la ligne 54, j'ai J'ai créé un jeu de course mais .... [ par arconius ] Voila j'ai voulu créé un jeu de course de bonhommes mais étant débutant je suis confronté à un problème, mon bonhomme descend normalement dans le circ Dans le genre prenant........ [ par Xs ] oui !c 'est trés chiant !j'explique mon pb : j'ai un code source, fais par moi-meme, et dedans, je veux que l'on saisisse des renseignement comme le l Un caractère rébarbatif. [ par Nini ] Bon alors voilà ma source :#include #include "iostream.h"#include "iomanip.h"#include "math.h"char mult(int a, int b){ if (b%a==0) cout <<"Vrai ("<<b< une fiche de renseignement [ par cabarrus ] je cherche à faire un programme qui demande des renseignements pour pouvoir ensuite les affiché comme une fiche d'identité!!!voici monprogramme mais m Pb Chaîne de caractères [ par mmuller57 ] Bonjour,J'ai créé un petit programme qui convertit les caractères d'une chaîne de caractères par leurs codes ASCII :#include #include #include int con Probleme reception sur un serveur windows en vc++ [ par alfred ] Salut a tous!!g un probleme dans mon serveur le recv renvoie la valeur -1 et je ne vois pas pouquoi, toute mes socket sont positives le client envois Serveur Vc++6 pb dans recv [ par alfred ] Salut a tousJ'ai un probleme dans mon serveur et je ne sais pas comment le resoudre. Le client se connecte bien et envoie le bon nombre de caracteres Format de données [ par leskritiques ] Voici le programme que je veux modofier :#include "chaine.h"#include "entreeSortie.h"#include "chaine.cpp"#include "entreeSortie.cpp"int pgcd (const i Les nombres aléatoires en C++ (Visual C++ 6.0) [ par Yabo ] Tout d'abord voilà le code :CODE #include #include #include #include using namespace std;void animstartscreen() { int n


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,265 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales