0

このサンプルでは、​​dwerror は. ですが10045L、このコードは 0x13d 値をエラーとして返します。フォーマットメッセージを取得するにはどうすればよいですか?ぜひご覧ください。

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;
}
4

2 に答える 2

1

0x13d ==317== ERROR_MR_MID_NOT_FOUND。見つけようとしているエラーのメッセージは、SYSTEMに存在しません。たぶんあなたのエラーは特定のdllまたはドライバーに起因します。どのdll\driverがハンドルを取得しようとしているのかがわかっている場合は、のFORMAT_MESSAGE_FROM_HMODULE代わりにハンドルを指定FORMAT_MESSAGE_FROM_SYSTEMして、への呼び出しでソースとしてハンドルを指定しますFormatMessage

それに加えて、を使用する場合は、のようなFORMAT_MESSAGE_ALLOCATE_BUFFER型の変数を宣言し、それをFormatMessageに渡す必要があります。使い終わったら、割り当てられたメモリを解放するために使用します。LPTSTRLPTSTR pMsg;(LPTSTR)&pMsgLocalFree(pMsg)

于 2012-02-27T17:56:34.633 に答える
1

まず、FORMAT_MESSAGE_ALLOCATE_BUFFER と言うと、ポインタ以上を割り当てる必要はありません。次に、lpBuffer でそのポインターへのポインターを渡します。だからこれを試してください:

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;
}

また、LocalFree に電話することを忘れないでください。

または、バッファを自分で割り当てます。

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;
}

また、これを試してください:

#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;
}

変数のアドレスを変更しようとしても意味がありません。それがおそらく、コードが機能しない理由です。

于 2012-02-27T09:35:12.580 に答える