Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1184876
  • 博文数量: 181
  • 博客积分: 6155
  • 博客等级: 准将
  • 技术积分: 1805
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-05 09:24
文章分类

全部博文(181)

文章存档

2015年(2)

2014年(3)

2013年(9)

2012年(29)

2011年(30)

2010年(36)

2009年(40)

2008年(32)

分类: C/C++

2011-12-22 09:52:51

  

根据一个错误码返回一个错误讯息

DWORD FormatMessage(

    DWORD dwFlags,

    LPCVOID lpSource,

    DWORD dwMessageId,

    DWORD dwLanguageId,

    LPTSTR lpBuffer,

    DWORD nSize,

    va_list* Arguments

    );

dwFlags:

# FORMAT_MESSAGE_ALLOCATE_BUFFER // 此函数会分配内存以包含描述字串。

# FORMAT_MESSAGE_FROM_SYSTEM,  // 在系统的id映射表中寻找描述字串

# FORMAT_MESSAGE_FROM_HMODULE  // 在其他资源模块中寻找描述字串

# FORMAT_MESSAGE_FROM_STRING   // 消息ID是个字串,不是个DWORD

通常为:FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM

lpSource:

# 指定了FORMAT_MESSAGE_FROM_HMODULE的话,此参数表示模块的HANDLE

# 指定了FORMAT_MESSAGE_FROM_STRING的话,此参数表示id字串

通常为:NULL

dwMessageId:

消息ID;如果指定FORMAT_MESSAGE_FROM_STRING,将被忽略。

dwLanguageId:

消息描述所用的语言

通常为:0表示自动选择

lpBuffer:

#如果未指定FORMAT_MESSAGE_ALLOCATE_BUFFER,则为自己提供的缓冲区

#否则为系统LocalAlloc分配,需要被用户LocalFree

nSize:

#如果未指定FORMAT_MESSAGE_ALLOCATE_BUFFER,则为自己提供的缓冲区大小

#否则为系统LocalAlloc分配之最小缓冲区大小

Arguments:

通常不使用

下面是个例子:

 
 
 
 
 
 
TCHAR* buffer;
  DWORD error = ERROR_DS_OBJ_STRING_NAME_EXISTS;
  ::FormatMessage(
   FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
   NULL,
   error,
   0,
   ( LPTSTR )&buffer,
   0,
   NULL );
  ::MessageBox( NULL, buffer, NULL, 0 );
阅读(692) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~