Rectifier cette erreur: getlasterror 0x13d
-
13-11-2019 - |
Question
Dans cet échantillon, le dwerror est 10045L
.mais ce code renvoie la valeur 0x13d comme erreur. Comment obtenir le message du format? Veuillez y jeter un œil.
TCHAR lpMsgBuf[512];
if(!FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwError,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL ))
{
wprintf(L"Format message failed with 0x%x\n", GetLastError());
return;
}
La solution
0x13d == 317 == ERROR_MR_MID_NOT_FOUND
. Le message pour l'erreur que vous essayez de trouver n'existe pas dans le système. Peut-être que votre erreur provient d'un dll ou chauffeur. Si vous savez quel conducteur dll essaie de l'abatta FORMAT_MESSAGE_FROM_HMODULE
à la place de FORMAT_MESSAGE_FROM_SYSTEM
et fournir la poignée comme source de l'appel à FormatMessage
.
Et en plus de cela si vous utilisez FORMAT_MESSAGE_ALLOCATE_BUFFER
vous devez déclarer une variable de type LPTSTR
Comme LPTSTR pMsg;
et le passer au formatMessage comme (LPTSTR)&pMsg
Et quand vous en avez terminé, utilisez LocalFree(pMsg)
pour libérer la mémoire allouée.
Autres conseils
Tout d'abord, lorsque vous dites Format_Message_Allocate_Buffer, vous n'avez pas besoin d'allouer plus qu'un pointeur. Ensuite, vous passez un pointeur à ce pointeur dans lpbuffer. Alors essayez ceci:
TCHAR* lpMsgBuf;
if(!FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwError,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL ))
{
wprintf(L"Format message failed with 0x%x\n", GetLastError());
return;
}
Et n'oubliez pas d'appeler localfree
Ou vous allouez vous-même le tampon:
TCHAR lpMsgBuf[512];
if(!FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwError,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) lpMsgBuf,
512, NULL ))
{
wprintf(L"Format message failed with 0x%x\n", GetLastError());
return;
}
Essayez également ceci:
#include <cstdio>
#include <cstdlib>
int alloc(char** pbuff,unsigned int n)
{
*pbuff=(char*)malloc(n*sizeof(char));
}
int main()
{
char buffer[512];
printf("Address of buffer before: %p\n",&buffer);
// GCC sais: "cannot convert char (*)[512] to char** ... "
// alloc(&buffer,128);
// if i try to cast:
alloc((char**)&buffer,128);
printf("Address of buffer after: %p\n",&buffer);
// if i do it the right way:
char* p_buffer;
alloc(&p_buffer,128);
printf("Address of buffer after: %p\n",p_buffer);
return 0;
}
Il n'a pas de sens d'essayer de modifier l'adresse d'une variable. C'est probablement pourquoi votre code ne fonctionne pas.