windowsapi函数:Windows API一日一练(81)FormatMessage函数

  在开发软件Software过程里经常要做工作就是调试许多问题出现不但是逻辑问题还有可能是对API不熟悉或者某种条件下API会出错那么这些出错原因是什么呢?通常只获取到也就是通过GetLastError得到当然可以根据这个码去查找MSDN就可以知道出错原因但有时在客户那里并没有MSDN那么就需要把API出错信息显示出来或者写到LOG里去这时就需要FormatMessage把出错码详细原因显示出来

  FormatMessage声明如下:

WINBASEAPI
DWORD
WINAPI
FormatMessageA(
    DWORD dwFlags,
    LPCVOID lpSource,
    DWORD dwMessageId,
    DWORD dwLanguageId,
    LPSTR lpBuffer,
    DWORD nSize,
    va_list *Arguments
    );
WINBASEAPI
DWORD
WINAPI
FormatMessageW(
    DWORD dwFlags,
    LPCVOID lpSource,
    DWORD dwMessageId,
    DWORD dwLanguageId,
    LPWSTR lpBuffer,
    DWORD nSize,
    va_list *Arguments
    );
#def UNICODE
# FormatMessage FormatMessageW
#
# FormatMessage FormatMessageA
#end // !UNICODE


  例子如下:

#001 //系统信息提示
#002  //蔡军生 2007/11/28 qq:9073204 深圳
#003  void TestErrorInfo(void)
#004  {
#005         //进行出错
#006          (!CreateDirectory(_T("c:\\"),0))
#007         {
#008               TCHAR szBuf[128];
#009               LPVOID lpMsgBuf;
#010               DWORD dw = GetLastError;
#011 
#012              FormatMessage(
#013                   FORMAT_MESSAGE_ALLOCATE_BUFFER |
#014                   FORMAT_MESSAGE_FROM_SYSTEM,
#015                   NULL,
#016                   dw,
#017                   MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
#018                   (LPTSTR) &lpMsgBuf,
#019                   0, NULL );
#020 
#021                wsprf(szBuf,
#022                    _T("%s 出错信息 (出错码=%d): %s"),
#023                    _T("CreateDirectory"), dw, lpMsgBuf);
#024 
#025               LocalFree(lpMsgBuf);
#026 
#027               //输出提示
#028               OutputDebugString(szBuf);
#029         }
#030        
#031  }


  后输出下面提示信息:

  CreateDirectory 出错信息 (出错码=5): 拒绝访问

Tags:  api函数大全 api函数 formatmessage windowsapi函数

延伸阅读

最新评论

发表评论