2012-02-27 22 views
0

このサンプルでは、​​dwerrorは10045Lですが、このコードは0x13d値をエラーとして返します。 フォーマットメッセージを取得するにはどうすればいいですか?このエラーを修正してください:GetLastError 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; 
} 
+0

エラーコード '0x13d'が何を意味するかを調べることをお勧めします。[here](http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382%28v=vs.100% 29.aspx) –

答えて

1

0x13d == 317 == ERROR_MR_MID_NOT_FOUND。 検索しようとしているエラーのメッセージがSYSTEMに存在しません。 あなたのエラーは、特定ののdllまたはのドライバに由来する可能性があります。 dll \ driverが処理しようとしているドライバを知っていて、FORMAT_MESSAGE_FROM_SYSTEMの代わりにFORMAT_MESSAGE_FROM_HMODULEを指定し、FormatMessageの呼び出しでハンドルをソースとして指定します。

そして、それ以外にも、あなたが使用している場合

FORMAT_MESSAGE_ALLOCATE_BUFFERあなたは LPTSTR pMsg;のようなタイプ LPTSTRの変数を宣言し (LPTSTR)&pMsgとしてのFormatMessageに渡して、あなたがして行われているときには、割り当てられたメモリを解放するために LocalFree(pMsg)を使用する必要があります。

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

それがありません変数のアドレスを変更しようとすると意味がありません。これはおそらくあなたのコードがうまくいかない理由です。

関連する問題