Win32 GetLasrError 实现
来源:互联网 发布:淘宝直通车怎样设置 编辑:程序博客网 时间:2024/05/29 13:10
Windows编程人员都知道windows下有一个函数
DWORD GetLastError(VOID);
用于返回调用函数的错误信息。他是怎么实现的呢?
大家知道进程只是一个容器,线程的容器,所有的指令在线程下运行。 一个应用程序最少有一个线程,称为主线程,主线程可以创建辅助线程。每个线程都有自己的一块专有内存区域,_tiddata(多线程,C运行库errno)。
当程序(线程)运行了一个函数后,会将错误信息设置到_tiddata的_terrno变量中。
_tiddata的源码在VS src mtdll.h中。我的在
D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\crt\src下。
节选一点点如下:
/* Structure for each thread's data */struct _tiddata { unsigned long _tid; /* thread ID */ uintptr_t _thandle; /* thread handle */ int _terrno; /* errno value */ void * _initaddr; /* initial user thread address */ 。。。。 };
这样当我们调用GetLastError时,只需要将_terrno的值返回即可。
DOWRD GetLastError()
{
_piddate ptd = _getptd_noexit();
return (&ptd->_terrno);
}
实际上当然不是这样简单的,我只是举个列子。实际上是通过TLSGetValue获取主调线程数据块地址。
TLS-线程区域存储空间。
参考《windows核心编程》
0 0
- Win32 GetLasrError 实现
- Win32 实现读写锁
- win32汇编实现汉诺塔
- Win32 SDK 实现状态栏
- win32 实现属性页
- Win32 API实现系统托盘
- 【C】Win32 风车实现
- [Win32] ShellHook的实现
- Win32实现迷宫
- win32贪吃蛇实现
- win32 API 实现ftp
- win32 进度条实现
- win32 http post 实现
- Win32实现DES加密算法
- Win32 API 实现系统托盘程序
- Win32 API 实现系统托盘程序
- Win32单实例应用程序实现
- WIN32汇编实现的HashTable
- 关于notepad++和gcc绑定
- jdbc连接oracle的方法
- Stanford 机器学习笔记 Week6 Advice for Applying Machine Learning
- 三层初体验
- 搭建博客hexo
- Win32 GetLasrError 实现
- 简单配置搞定 Nginx + Tomcat + HTTPS
- [iOS学习]关于多线程和NSThread
- Activity中的intent的FLAG代表的意义
- linux基础命令
- Http请求报文和响应报文
- **company-面试
- Leetcode ☞237. Delete Node in a Linked List ☆
- hdoj M斐波那契数列 4549&nyoj 又见斐波那契数列 1000 (矩阵快速幂&规律)