EXPLICATIF D'ERREURS : EXPLICITELASTERROR() <= GETLASTERROR

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 9 juil. 2004 à 16:13
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 12 août 2005 à 18:11
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/24434-explicatif-d-erreurs-explicitelasterror-getlasterror

magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
12 août 2005 à 18:11
après avoir approfondit cette histoire de stl,
c'est pas encore génial avec VC6

mais j'arrete, y en a qui vont parler des dinausaures....
;)

++
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
12 juil. 2004 à 16:19
STL...

pas assez,

G prévu de m'y pencher un de ces 4

@+
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
12 juil. 2004 à 12:24
j'utilise mes BString car je les compile aussi bien sous Win32 que macOS, BeOS, Unix...
=> tu connais std::string de la SL ?
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
12 juil. 2004 à 10:24
Rep à ma qu : pr 0 : faut encore remodifier...
la fin:

...
}
return "PB dans BVisuel::expliciteLastError() ";
}
return "OK";
}
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
12 juil. 2004 à 10:20
BruNews > évidemment, magnifique....

voici dc la nouvelle version:

BString BVisuel::expliciteLastError()
{
/// --------------------------------------------------------------------------
/// ---------------- BVisuel::expliciteLastError() -> BString ----------------
/// --------------------------------------------------------------------------
/// ----- Objectif : donner l'explication de la derniere erreur levée (GetLastError)
/// ----- Auteur(s) : Magic Nono 02/07/04 - BruNews 12/07/04
/// ----- PreCond : /
/// ----- PostCond : /
/// ----- Etat : 1 (-1<0<1<2)
/// --------------------------------------------------------------------------
/// ----- retour (BString) : cf.obj
/// --------------------------------------------------------------------------
/// ----- Var Internes à la fonction (2) : erreur ,rep
{
LPVOID lpMsgBuf = 0;
DWORD dwErr = GetLastError();
if(dwErr)
{
FormatMessage(//
// DWORD dwFlags, // source and processing options
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,//
NULL,// LPCVOID lpSource, // pointer to message source
dwErr,// DWORD dwMessageId, // requested message identifier
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),// DWORD dwLanguageId, // language identifier for requested message
(LPTSTR) &lpMsgBuf,// LPTSTR lpBuffer, // pointer to message buffer
0,// DWORD nSize, // maximum size of message buffer
NULL);// va_list *Arguments // pointer to array of message inserts
if(lpMsgBuf)
{
BString msg=(char*)lpMsgBuf;
LocalFree(lpMsgBuf);
return (msg);
}
//if(lpMsgBuf) { MessageBox(hOwner, (LPCTSTR)lpMsgBuf, "Error", MB_ICONEXCLAMATION ); LocalFree(lpMsgBuf); }
}
return "PB dans BVisuel::expliciteLastError() ";
}

Rq: je ne C pas si l'erreur 0 est bien récupérée, on verra a l'utilisation

merci à ts !!!
C tellement mieux dans la langue du pays...

Magicalement!
Nono.
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
12 juil. 2004 à 09:46
Bj

merci pr vos com

BruNews> Je n'étais pas tombé dessus, je test de suite - merci, ++

Vecchio> à qui t'adresses tu?
Si C pr moi, ça répond à une demande & je l'ai généré quasi automatiqut dc...

pas portable :
si des sections sont spécifiques aux mfc, on peut les encadrer par des directives de précomp
si ça vient du fait que les cases sont spécifiés de maniere static, G spécifié que ça faisait parti des améliorations à venir

Black> idem

JC>
BString :: operator+=
: une concaténation de caractère, comme les CString
j'utilise mes BString car je les compile aussi bien sous Win32 que macOS, BeOS, Unix...


@+
Magicalement, Nono.
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
10 juil. 2004 à 16:59
Comment on sait que :
******************************
case 132:
rep+=" The file pointer cannot be set on the specified device or file. ERROR_SEEK_ON_DEVICE ";
break;
******************************

Qui nous dit que c'est partout vrai sur tout les windows de la planete (bon les plus utilises) ? si c'est le cas alors effectivement le code est portable, mais est-ce le cas ? si oui ou c'est specifie ?
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
10 juil. 2004 à 11:12
JCDjcd => et c'est quoi le rapport avec la portabilité ?

vecchio56 => c une classe à lui (un equivalent de CString, std::string, ...) qu'il a posé ici il y a quelque tps
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
10 juil. 2004 à 10:08
Et en plus il utilise des BString, c'est quoi ca?
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
10 juil. 2004 à 09:38
J'en ai sais rien si il y a un standard mais je suis la logique suivante :
Windows me retourne un code d'erreur avec GetLestError après il me dit que pour avoir plus d'information sr l'erreur il faut appeller FormatMessage, donc je n'essayes pas de savoir quel nombre va avec quel message (ce qui est peut etre d'ailleur suceptible de changer), j'utilise la fonction que Windows me dit de prendre pour m'assurer le bon message correspondant.
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
10 juil. 2004 à 01:05
en plus c'est pas tu tout portable cette méthode. >> ya un standard pour récupérer les erreurs ?
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
9 juil. 2004 à 21:00
T'es pas un peu fou de faire ca?
Même remarque pour la fonction donnée dans la MSDN, en plus avec la langue du systeme.
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
9 juil. 2004 à 17:21
C'est ce que j'allais dire, ... en plus c'est pas tu tout portable cette méthode.

Sinon j'ai une question :moi j'ai jamais ca :
rep += "toto" ?? bizzarre non ? c'est fais koi, strcat ?
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 juil. 2004 à 16:13
aussi dans MSDN mais beaucoup plus court:

void DisplayLastError(HWND hOwner)
{
LPVOID lpMsgBuf = 0;
DWORD dwErr = GetLastError();
if(dwErr) {
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, dwErr, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
(LPTSTR) &lpMsgBuf, 0, NULL);
if(lpMsgBuf) {
MessageBox(hOwner, (LPCTSTR)lpMsgBuf, "Error", MB_ICONEXCLAMATION );
LocalFree(lpMsgBuf);
}
}
}
Rejoignez-nous