FormatMessage

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

需求

客戶端
需要Windows XP、Windows 2000 Professional、Windows NT Workstation、Windows Me、Windows 98或Windows 95。
伺服器
需要Windows Server 2003、Windows 2000 Server或Windows NT Server。
頭檔案
在Winbase.h中聲明,包含於Windows.h。
庫檔案
Kernel32.lib。
DLL
需要Kernel32.dll。
Unicode
FormatMessageW (Unicode)和FormatMessageA (ANSI)的形式實現。

相關詞條

熱門詞條

聯絡我們