GetLastError()から得られたエラーコードは文字列記述を得る
Windowsで関数呼び出しのたびに、エラーが発生した場合はGetLastError関数でエラーコードを取得できます.
エラー記述を取得する方法を示す関数を作成します.
FormatMessage関数の使用:
DWORD FormatMessage( DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPTSTR lpBuffer, DWORD nSize, va_list* Arguments ); dwFlags: # FORMAT_MESSAGE_ALLOCATE_BUFFER//この関数では、記述文字列を含むメモリが割り当てられます.#FORMAT_MESSAGE_FROM_SYSTEM,//システムのidマッピングテーブルで記述文字列を探します#FORMAT_MESSAGE_FROM_HMODULE//他のリソースモジュールで説明文字列を探す#FORMAT_MESSAGE_FROM_STRING//メッセージIDは文字列であり、DWORDではなく通常:FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM lpSource:#FORMAT_が指定されていますMESSAGE_FROM_HMODULEの場合、このパラメータはモジュールのHANDLE#がFORMAT_を指定していることを示しますMESSAGE_FROM_STRINGの場合、このパラメータはid文字列が通常:NULL dwMessageId:メッセージID;FORMAT_を指定した場合MESSAGE_FROM_STRING、無視されます.dwLanguageId:メッセージ記述に使用される言語は、通常、0はlpBufferを自動的に選択することを示す:#FORMATが指定されていない場合MESSAGE_ALLOCATE_BUFFERは、自分が提供したバッファ#がシステムLocalAllocに割り当てられていない場合、ユーザーLocalFree nSize:#FORMAT_が指定されていない場合MESSAGE_ALLOCATE_BUFFERは、自分が提供したバッファサイズ#以外はシステムLocalAllocに割り当てられた最小バッファサイズArguments:NULLの値を保持
エラー記述を取得する方法を示す関数を作成します.
LPSTR ConvertErrorCodeToString(DWORD ErrorCode)
{
HLOCAL LocalAddress=NULL;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_IGNORE_INSERTS|FORMAT_MESSAGE_FROM_SYSTEM,
NULL,ErrorCode,0,(PTSTR)&LocalAddress,0,NULL);
return (LPSTR)LocalAddress;
}
関数のパラメータErrorCodeは誤ったID番号であり、GetLastError()で得ることができる.文字列ポインタを返します.FormatMessage関数の使用:
DWORD FormatMessage( DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPTSTR lpBuffer, DWORD nSize, va_list* Arguments ); dwFlags: # FORMAT_MESSAGE_ALLOCATE_BUFFER//この関数では、記述文字列を含むメモリが割り当てられます.#FORMAT_MESSAGE_FROM_SYSTEM,//システムのidマッピングテーブルで記述文字列を探します#FORMAT_MESSAGE_FROM_HMODULE//他のリソースモジュールで説明文字列を探す#FORMAT_MESSAGE_FROM_STRING//メッセージIDは文字列であり、DWORDではなく通常:FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM lpSource:#FORMAT_が指定されていますMESSAGE_FROM_HMODULEの場合、このパラメータはモジュールのHANDLE#がFORMAT_を指定していることを示しますMESSAGE_FROM_STRINGの場合、このパラメータはid文字列が通常:NULL dwMessageId:メッセージID;FORMAT_を指定した場合MESSAGE_FROM_STRING、無視されます.dwLanguageId:メッセージ記述に使用される言語は、通常、0はlpBufferを自動的に選択することを示す:#FORMATが指定されていない場合MESSAGE_ALLOCATE_BUFFERは、自分が提供したバッファ#がシステムLocalAllocに割り当てられていない場合、ユーザーLocalFree nSize:#FORMAT_が指定されていない場合MESSAGE_ALLOCATE_BUFFERは、自分が提供したバッファサイズ#以外はシステムLocalAllocに割り当てられた最小バッファサイズArguments:NULLの値を保持