1.Windows函数检测到错误时,会使用一种名为“线程本地存储区”的机制将相应的错误代码与“主调线程”关联到一起。这种机制使得不同的线程能独立运行,不会出现相互干扰对方的错误代码的情况。

2.GetLastError返回32位的错误代码表,每个错误有三种表示:一个消息ID、消息文本、和一个编号。函数失败后应立即调用GetLastError,否则很可能被改写。

//
// MessageId: ERROR_SUCCESS
//
// MessageText:
//
// The operation completed successfully.
//
#define ERROR_SUCCESS 0L #define NO_ERROR 0L // dderror
#define SEC_E_OK ((HRESULT)0x00000000L) //
// MessageId: ERROR_INVALID_FUNCTION
//
// MessageText:
//
// Incorrect function.
//
#define ERROR_INVALID_FUNCTION 1L // dderror //
// MessageId: ERROR_FILE_NOT_FOUND
//
// MessageText:
//
// The system cannot find the file specified.
//
#define ERROR_FILE_NOT_FOUND 2L

3.可以用FormatMessage函数来格式化输出错误信息。

void OutputLastError(LPTSTR lpszFunctionName)
{
LPVOID lpMsgBuf;
LPVOID lpDisplayBuf;
DWORD dwErrorCode = GetLastError(); FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dwErrorCode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf,
, NULL); lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunctionName) + ) * sizeof(TCHAR));
StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR), TEXT("%s failed with error %d : %s"), lpszFunctionName, dwErrorCode, lpMsgBuf); _tprintf((LPCTSTR)lpDisplayBuf); LocalFree(lpMsgBuf);
LocalFree(lpDisplayBuf);
}

4.我们可以使用 void SetLastError(DWORD dwErrCode); 来设置错误代码,也可以创建自己的代码,32位字段的组成如下:

需要注意的是第29位。

最新文章

  1. MySQL实现嵌套集合模型
  2. Fast Fourier Transform
  3. 404. Sum of Left Leaves
  4. 【leetcode】Binary Tree Right Side View(middle)
  5. cocos2d/x 自带字体(label)
  6. Python 基礎 - pyc 是什麼
  7. Appium for win7 环境搭建
  8. Html - Footer
  9. Core Java Volume I — 3.1. A Simple Java Program
  10. Codeforces 424 B Megacity【贪心】
  11. 关于ref与out的区别
  12. 推荐牛X的一本JS书
  13. Spring(AbstractRoutingDataSource)实现动态数据源切换--转载
  14. css 权威指南笔记(一)
  15. Oracle数据库按属性成绩查询
  16. AIX 命令大全
  17. 原型及原型链,以及prototype和__proto__属性(笔记便于以后复习)
  18. 项目收集-AutoMapper使用,事务,Json.Net序列化反序列化,代码生成调用等
  19. 【ASP.NET Core】给路由规则命名有何用处
  20. 一对一Socket简单聊天的实现

热门文章

  1. npm 的 --save 和 --save-dev 的区别
  2. CentOS 7安装Redis
  3. Linux下安装PCRE
  4. TensorFlow学习笔记之--[compute_gradients和apply_gradients原理浅析]
  5. CentOS 7 安装配置 Vsftpd
  6. linux 用户空间获得纳秒级时间ns【转】
  7. 设计模式C++学习笔记之六(Facade门面模式)
  8. vc++基础班[23]---文件夹的基本操作
  9. centos6.8安装httpd后无法访问
  10. spring3.1 profile 配置不同的环境