FormatMessage是一個Windows API函式。它的功能就是將GetLastError函式得到的錯誤信息(這個錯誤信息是數字代號)轉化成字元串信息的函式。
基本介紹
- 外文名:FormatMessage
- 含義:Windows API函式
- 功能:GetLastError的返回值換成字元串
- 可選參數:dwFlags
語法,參數,返回值,舉例,需求,
語法
DWORD WINAPI FormatMessage ( DWORD dwFlags, // source and processing options LPCVOID lpSource, // message source DWORD dwMessageId, // message identifier DWORD dwLanguageId, // language identifier LPTSTR lpBuffer, // message buffer DWORD nSize, // maximum size of message buffer va_list *Arguments // array of message inserts );
參數
dwFlags
標誌位,決定如何說明lpSource參數,dwFlags的低位指定如何處理換行功能在輸出緩衝區,也決定最大寬度的格式化輸出行。
可選參數:
標誌 | 標誌說明 |
---|---|
FORMAT_MESSAGE_ALLOCATE_BUFFER | 函式會分配一個足夠大的緩衝區保存格式化訊息,並且通過lpBuffer指向該 地址。當不再使用lpBuffer數據時,需調用LocalFree釋放記憶體。 |
FORMAT_MESSAGE_ARGUMENT_ARRAY | Arguments參數不是指向va_list結構體,是一個指向保存參數的數組指針。 |
FORMAT_MESSAGE_FROM_HMODULE | 指定lpSource參數是要去搜尋的一個包含訊息表的模組句柄。如果 lpSource 是NULL,會搜尋當前進程的主模組,這個標誌不能與FORMAT_MESSAGE_FROM_STRING 同時使用。 |
FORMAT_MESSAGE_FROM_STRING | lpSource參數是一個指向以NULL結尾的字元串,字元串包含一個訊息定義, 這個訊息定義可以包含插入序列。此標誌不能與FORMAT_MESSAGE_FROM_HMODULE 、 FORMAT_MESSAGE_FROM_SYSTEM同時使用 |
FORMAT_MESSAGE_FROM_SYSTEM 0x00001000 | 函式會從系統信息列表中搜尋所請求的信息。如果使用 FORMAT_MESSAGE_FROM_HMODULE,函式會先在lpSource指定 的模組中搜尋請求的訊息,如果搜尋不到再去搜尋系統訊息表資源。此 標誌不能與FORMAT_MESSAGE_FROM_STRING同時使用。 |
FORMAT_MESSAGE_IGNORE_INSERTS | 指定訊息定義中的插入序列將被忽略,並將其直接傳遞給輸出緩衝區。 此標誌對於獲取稍後格式化的訊息很有用。 如果設定了此標誌,則忽略Arguments參數。 |
lpSource
根據dwFlags標誌而定。
dwMessageId
請求的訊息的標識符。當dwFlags標誌為FORMAT_MESSAGE_FROM_STRING時會被忽略。
dwLanguageId
請求的訊息的語言標識符。
LPTSTR lpBuffer
接收錯誤信息描述的緩衝區指針。
nSize
如果FORMAT_MESSAGE_ALLOCATE_BUFFER標誌沒有被指定,這個參數必須指定為輸出緩衝區的大小,如果指定值為0,這個參數指定為分配給輸出緩衝區的最小數。
Arguments
保存格式化信息中的插入值的一個數組。
返回值
如果函式調用成功,返回輸出緩衝區的大小,除最後一個空字元。如果失敗則返回0。
舉例
// 系統錯誤信息提示。void TestErrorInfo(void){ //進行出錯。 if (!CreateDirectory(_T("c:\\"),0)) { TCHAR szBuf[128]; LPVOID lpMsgBuf; DWORD dw = GetLastError(); FormatMessage ( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); wsprintf(szBuf, _T("%s 出錯信息 (出錯碼=%d): %s"), _T("CreateDirectory"), dw, lpMsgBuf); LocalFree(lpMsgBuf); //輸出提示。 OutputDebugString(szBuf); }}
調用後輸出下面的提示信息:
CreateDirectory 出錯信息 (出錯碼=5): 拒絕訪問。