Windows下面的SDK调用返回错误时,经常需要知道错误的具体信息,而不是错误码。
下面是一个示例代码,取名为ErrorUtils.h,.cpp
头文件:
#pragma once
#include <windows.h>
class ErrorUtils
{
public:
static CHAR* GetLastErrorText();
static CHAR* GetLastErrorText(DWORD errorCode);
};
实现文件:
#include "ErrorUtils.h"
#include <stdio.h>
#include <string.h>
/**
Ported from http://msdn.microsoft.com/en-us/library/ms679360%28VS.85%29.aspx
The caller should not free the returned value.
e.g.:
if (!ReadFile(...)) {
Log("ReadFile failed: %s", ErrorUtils::GetLastErrorText());
}
*/
CHAR* ErrorUtils::GetLastErrorText() {
return GetLastErrorText(GetLastError());
}
CHAR* ErrorUtils::GetLastErrorText(DWORD errorCode) {
static CHAR pBuf[1024] = { 0 };
const ULONG bufSize = 1024;
DWORD retSize;
LPTSTR pTemp = NULL;
pBuf[0] = '0';
retSize = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_ARGUMENT_ARRAY,
NULL,
errorCode,
LANG_NEUTRAL,
(LPTSTR)&pTemp,
0,
NULL);
if (retSize > 0) {
pTemp[strlen(pTemp) - 2] = '\0'; //remove cr and newline character
sprintf_s(pBuf, bufSize, "%0.*s", bufSize, pTemp);
LocalFree((HLOCAL)pTemp);
}
return(pBuf);
}