函式說明
FormatMessage功能就是將GetLastError得到的錯誤信息(這個錯誤信息是數字代號)轉化成字元串信息的函式
FormatMessage()
函式FormatMessage聲明如下:
DWORD WINAPI FormatMessage(
__in DWORD dwFlags,
__in_opt LPCVOID lpSource,
__in DWORD dwMessageId,
__in DWORD dwLanguageId,
__out LPTSTR lpBuffer,
__in DWORD nSize,
__in_opt va_list *Arguments
);
參數說明:
dwFlags:
標誌位,決定如何說明lpSource參數,dwFlags的低位制定如何處理換行功能在輸出緩衝區,也決定最大寬度的格式化輸出行。
可選參數:
標誌 | 標誌說明 |
FORMAT_MESSAGE_ALLOCATE_BUFFER 0x00000100 | 函式會分配一個足夠大的緩衝區保存格式化訊息,並且通過lpBuffer指向該 地址。 |
FORMAT_MESSAGE_ARGUMENT_ARRAY 0x00002000 | Arguments參數不是指向va_list結構體,但是是一個指向保存參數的數據。 |
FORMAT_MESSAGE_FROM_HMODULE 0x00000800 | lpSource參數是需要去搜尋的一個包含消息表的模組執行緒。如果lpSource 是NULL,當前進程的套用圖像會被搜尋,這個標誌不能同FORMAT_ME SSAGE_FROM_STRING使用。 |
FORMAT_MESSAGE_FROM_STRING 0x00000400 | lpSource參數是一個指向以NULL結尾的字元串,字元串包含一個訊息定義, 這個訊息定義可以包含插入序列。此標誌最好不要和FORMAT_MESSAGE_F ROM_HMODULE或者FORMAT_MESSAGE_FROM_SYSTEM使用 |
FORMAT_MESSAGE_FROM_SYSTEM 0x00001000 | 函式會為了請求的信息而搜尋系統的訊息表資源。如果標誌同時也指定了 FORMAT_MESSAGE_FROM_HMODULE,那么函式會先在lpSource指定 的模組中搜尋請求的訊息,如果搜尋不到,就去搜尋系統訊息表資源。此 標誌不能與FORMAT_MESSAGE_FROM_STRING使用。 |
FORMAT_MESSAGE_IGNORE_INSERTS 0x00000200 | 訊息定義中的插入序列會被一直忽略和跳過直到輸出緩衝區不改變,並且 Arguments會被忽略。 |
lpSource:
根據dwFlags標誌而定。
dwMessageId:
請求的訊息的標識符。當dwFlags標誌為FORMAT_MESSAGE_FROM_STRING時會被忽略。
dwLanguageId:
請求的訊息的語言標識符。
nSize:
如果FORMAT_MESSAGE_ALLOCATE_BUFFER標誌沒有被指定,這個參數必須指定為輸出緩衝區的大小,
如果指定,這個參數指定為分配給輸出緩衝區的最小數。
Arguments:
保存格式化信息中的插入值的一個數組。
返回值:
如果函式調用成功,返回輸出緩衝區的大小,除最後一個空字元。如果失敗側返回0。
舉列
#001 //系統錯誤信息提示。
#002 //蔡軍生 2007/11/28 QQ:9073204 深圳
#003 void TestErrorInfo(void)
#004 {
#005 //進行出錯。
#006 if (!CreateDirectory(_T("c:\\"),0))
#007 {
#008 TCHAR szBuf[128];
#009 LPVOID lpMsgBuf;
#010 DWORD dw = GetLastError();
#011
#012 FormatMessage(
#013 FORMAT_MESSAGE_ALLOCATE_BUFFER |
#014 FORMAT_MESSAGE_FROM_SYSTEM,
#015 NULL,
#016 dw,
#017 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
#018 (LPTSTR) &lpMsgBuf,
#019 0, NULL );
#020
#021 wsprintf(szBuf,
#022 _T("%s 出錯信息 (出錯碼=%d): %s"),
#023 _T("CreateDirectory"), dw, lpMsgBuf);
#024
#025 LocalFree(lpMsgBuf);
#026
#027 //輸出提示。
#028 OutputDebugString(szBuf);
#029 }
#030
#031 }
調用後輸出下面的提示信息:
CreateDirectory 出錯信息 (出錯碼=5): 拒絕訪問。