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 [in]
格式话选项,表明lpSource参数的解释方式。
这个参数可以选取下面的值:
Value |
Meaning |
FORMAT_MESSAGE_ALLOCATE_BUFFER 0x00000100 |
函数自动使用LocalAlloc函数,来为lpBuffer分配内存。lpBuffer必须是一个指向LPTSTR的指针,同时,你必须对这个指针进行下面的强制转换(LPTSTR)&lpBuffer。此时,nSize规定了,FormatMessage函数,至少要分配nSize*sizeof(TCHAR)个自己的内存。如果要释放这段分配的内存,请使用LocalFree函数。 |
FORMAT_MESSAGE_ARGUMENT_ARRAY 0x00002000 |
这个标志表示,Arguments参数不是一个va_list结构体,而是一个指向数组的指针,这个数组中的值就是字符串中的参数。 如果使用这个标志,数组中的值必须是32为的,不能是64位的,如果要使用64位的值,那么,必须使用va_list结构体。 |
FORMAT_MESSAGE_FROM_HMODULE 0x00000800 |
lpSource参数,指向一个模块句柄,如果lpSource=NULL,那么代表当前应用程序映像。这个表示不能和FORMAT_MESSAGE_FROM_STRING标志一起使用。 如果lpSource指向的模块,没有消息列表资源,那么FormatMessage函数返回一个错误:ERROR_RESOURCE_TYPE_NOT_FOUND。 |
FORMAT_MESSAGE_FROM_STRING 0x00000400 |
lpSource指向一个NULL结尾的字符串,这个字符串就是消息。这个标志不能和FORMAT_MESSAGE_FROM_HMODULE 和 FORMAT_MESSAGE_FROM_SYSTEM一起使用 |
FORMAT_MESSAGE_FROM_SYSTEM 0x00001000 |
这个函数从系统消息列表资源中,获取消息。 如果这个标志被设置,那么可以讲GetLastError函数的返回值,作为参数传给给FormatMessage函数,来获取错误提示。 |
FORMAT_MESSAGE_IGNORE_INSERTS 0x00000200 |
这个标志表示Arguments参数将被忽略。 |
lpSource [in, optional]
消息所在位置,这个参数类型,根据dwFlags标志来设定。
dwMessageId [in]
消息索引,如果lpSource是一个字符串,那么这个参数被忽略。
dwLanguageId [in]
语言标识,在这里使用NULL,表示操作系统的语言。
lpBuffer [out]
接受消息字符串的内存块。
nSize [in]
内存大小。如果内存由FormatMessage函数分配,那么这个参数表示内存块的最小大小。
Arguments [in, optional]
消息中的参数。
Return Value
如果函数成功,返回字符消息的字符数。
如果函数失败,返回0,用GetLastError函数,获取错误信息。