FormatMessage

FormatMessage功能就是將GetLastError得到的錯誤信息(這個錯誤信息是數字代號)轉化成字元串信息的函式。

函式說明

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): 拒絕訪問。

相關詞條

相關搜尋

熱門詞條

聯絡我們