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;
}
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top