Erreur execution code c++ visual2005

Signaler
Messages postés
9
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
21 mars 2008
-
Messages postés
9
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
21 mars 2008
-
Bonjour,

A l'éxécution de mon code une exception est générée sur cette instruction:

FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, rc, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),(LPTSTR) &lpMsgBuf, 0, NULL);

=>System.Runtime.InteropServices.MarshalDirectiveException: Impossible de marshaler 'parameter #7' : Les pointeurs ne peuvent pas faire référence à des structures marshalées. Utilisez ByRef à la place.

Le paramètre 7 est le dernier NULL mais que mettre à la place d'autant que cet exemple est cité assez souvent dans les forums tel quel?

Merci pour votre aide

7 réponses

Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Bonjour,

Est-ce qu'il y a du formatge (%...) dans la chaîne pointée par lpMsgBuf ? Si oui il doit y avoir les variables à formater à la place du NULL.

Jean-François
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Je voulais dire dans la chaîne formatée qui sera pointée par lpMsgBuf !

Jean-François
Messages postés
9
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
21 mars 2008

non c'est juste un pointeur initialisé à NULL
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Mais dans la chaîne rc ?
C'est cette chaîne qui contient le texte qui sera copié (et formaté ?) dans la chaîne pointée par lpMsgBuf.

Jean-François
Messages postés
9
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
21 mars 2008

rc est un DWORD, en fait je veux afficher le msg correspondant au code retour
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Sous Visual C++ 6.0 :

   DWORD rc = 21; // erreur "device not ready"
   LPVOID lpMsgBuf = NULL;
   FormatMessage
   (
       FORMAT_MESSAGE_ALLOCATE_BUFFER |
       FORMAT_MESSAGE_IGNORE_INSERTS |
       FORMAT_MESSAGE_FROM_SYSTEM
      ,NULL
      ,rc
      ,MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL)
      ,(LPTSTR)&lpMsgBuf
      ,0
      ,NULL
   );
   printf("lpMsgBuf = %s",lpMsgBuf);

Me donne (sous console d'où les problème d'accent) :

lpMsgBuf = Le pÚriphÚrique n'est pas prÛt.

Jean-François
Messages postés
9
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
21 mars 2008

je te remercie pour ton aide, je regarderai ça la semaine prochaine, bon WE de Pacques.