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函数,获取错误信息。


posted @ 2017-05-01 20:17  jadeshu  阅读(465)  评论(0编辑  收藏  举报