Window 错误码介绍

Windows返回值类型:VOID:函数不可能执行失败
     BOOL:失败返回0;否则非0(最好检测是否为0)
     HANDLE:失败返回NULL或INVALID_HANDLE_VALUE(-1);否则返回可操作对象
     PVOID:失败返回NULL;否则返回标识的数据块内存地址
     LONG/DWORD:一般用于返回数量的函数;在com中用于指针地址
     DWORD GetLastError();
     该函数返回线程的32位错误代码,此函数应该被立即调用,如果调用了其它的Windows函数,旗值可能会被改写
     VOID SetLastError(DWORD dwErrCode);
     设置线程的最后错误代码,可以是Windows定义的,也可以是自己定义的
     @err,hr     监控线程的最后错误代码
     错误代码域说明:0-15 异常代码-可以是Microsoft定义的也可以是用户定义的
       16-27 设备代码,必须由Microsoft定义
       28 保留,必须为0
       29 0-Microsoft定义的错误代码;1为用户定义的
       30-31 严重性:0-成功;1-供参考;2-警告;3-错误
     FormatMessage(); 格式化错误消息,取得文本描述
     PTSTR CharNext(PCTSTR pszCurrentChar);
     PTSTR CharNext(PCTSTR pszStart,PCTSTR pszCurrentChar);
     BOOL IsDBCSLeadByteTRUE(BYTE bTestChar); 判断字节是否为多字节字符的前导字节

     下面附上FormatMessage()使用的简单使用代码:
      其中的is_win32_error判断错误码是否为系统定义(29位为0系统定义,为1用户定义的错误码)

      void format_win_error_message(DWORD dwErrCode,TCHAR *tcErrMess,int nBuffLen,bool bChinese)
     {
         if(tcErrMess == NULL) return;
         DWORD errnoo = dwErrCode;//GetLastError();
         _tcscpy(tcErrMess,_T(""));

         bool bWin32 = is_win32_error(errnoo);
         HLOCAL hLoc = NULL;
         DWORD  lgFlag = 0;
         if(bChinese == false)
         {       
             lgFlag = MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US);
             if(bWin32 == false)
             {
                 _tcsncpy(tcErrMess,_T("The error code is defined by user"),nBuffLen);
                return;
              }
              else
              {
                 _tcsncpy(tcErrMess,_T("The ERROR code is undefined"),nBuffLen);
               }
          }
          else
          {
               lgFlag = MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED);
               if(bWin32 == false)
               {
                    _tcsncpy(tcErrMess,_T("此错误代码由用户定义"),nBuffLen);
                    return;
               }
               else
               {
                   _tcsncpy(tcErrMess,_T("无定义的错误代码"),nBuffLen);
               }
           }
           BOOL bOk = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_ALLOCATE_BUFFER,
                                    NULL,errnoo,lgFlag,(LPTSTR)&hLoc,0,NULL);
 
           if(hLoc != NULL)
           {
               _tcsncpy(tcErrMess,(LPTSTR)LocalLock(hLoc),nBuffLen);
               LocalFree(hLoc);
           }
        }

猜你喜欢

转载自blog.csdn.net/china0851/article/details/40261773