Win32 Error
一、Win32错误
也就是Win32子系统产生的错误。当我们在自己的代码里调用Windows系统的API函数,系统执行API内部代码,当API内部代码出现错误,会将预先定义好的错误代码写到调用这个API的线程局部存储区域(这个区域是每个线程独有的其他线程无法更改。它存储着一些线程独有的东西),然后API返回,返回值告诉我们该API执行失败了。如果我们的代码加了检测,发现了API失败,这时我们调用GetLastError() 函数去获取这个错误代码,这个错误代码是一个DWORD值。如果我们不及时获取,就会被后面调用的API所覆盖。当我们想在自己的函数里借用这种机制时,可以调用SetLastError函数来设置一个错误代码。
这里我们提到了两个API:
- DWORD GetLastError(VOID)
- void SetLastError(DWORD dwErrCode)
二、Win32 Error Code
所有Win32错误代码都必须在0x0000到0xFFFF范围内,尽管Win32错误代码可以同时用于16位字段和32位字段,我们通常还是用32位来表示。大多数值已经定义了默认错误消息,可用于将值映射到我们可以读懂的文本消息。它的构成如下:

虽然win32子系统错误的位域有32bit,但受限于值的范围,也只能是0x00000000---0x0000FFF,也就是上面的位域高16bit都是0。
通过前面的说明我们了解了错误代码的获取,以及错误代码和信息是怎么制作出来的,那么当我们用GetLastError获取到错误代码后,我们只是有了一个编号,还是不了解具体什么原因什么错误,这时,我们该用到另外一个函数了FormatMessage。原型:
DWORD WINAPI FormatMessage ( DWORD dwFlags, // source and processing options LPCVOID lpSource, // message source DWORD dwMessageId, // message identifier DWORD dwLanguageId, // language identifier LPTSTR lpBuffer, // message buffer DWORD nSize, // maximum size of message buffer va_list *Arguments // array of message inserts );FormatMessage来查询错误信息,写到我们自己的日志里,来帮助我们调试程序的功能性和业务性问题。Win32 Error的更多相关文章
- HM NIS Edit 2.0.3 Win32 Error. Code:740.请求的操作需要提升
使用NSIS安装向导,生成脚本后,按F9后,居然提示:HM NIS Edit 2.0.3 Win32 Error. Code:740.请求的操作需要提升 一开始就出错了,还真不顺. 在网上搜索了一下, ...
- \bin\sh.exe:*** Couldn't reserve space for cygwin's heap,Win32 error 0
Git一直使用都好好的,今天git pull的时候,报了如下的错误,\bin\sh.exe:*** Couldn't reserve space for cygwin's heap,Win32 err ...
- WinDbg远程调试unable to initialize target machine information win32 error 0n87
Debugging Target:Windows XP SP3 32-bit Debugging Host:Windows Server 2012 64-bit 当附加到目标服务器某个进程后,WinD ...
- Win32 error code message
http://fit.c2.com/fit/files/LispPlatform/lisp/clisp-2.28/src/errwin32.d # Calls a function, passing ...
- cygwin安装sshd服务(win7)Error installing a service: OpenSCManager: Win32 error 5:
Error installing a service: OpenSCManager: Win32 error 5: 出现这个问题的解决办法:win7系统管理员运行Cygwin软件 ...
- Win32 Error Code COM Error Code NTSTATUS的区别、转换
这三种码其实都是Windows系统错误码,只是对应不同API和使用场景.它们既有区别,又相互有联系. 一.区别和联系 都是32位值 Win32 Error Code和NTSTATUS位域组成相同,但W ...
- cygrunsrv: Error starting a service: QueryServiceStatus: Win32 error 1062: 解决办法
问题原因:很可能是/var/log的权限设置不正确.首先执行 mkpasswd 和 mkgroup 重新生成权限信息,再删除sshd服务,重新配置 解决办法: $ mkpasswd -l > / ...
- Git使用出错:Couldn‘t reserve space for cygwin‘s heap, Win32
今天使用Git在命令行下更新代码遇到了问题,起初觉得是自己安装某软件导致冲突,从网上搜索了一下找到类似问题,成功解决问题. 错误信息如下: E:\storm-sql>git pull origi ...
- System Error Codes
很明显,以下的文字来自微软MSDN 链接http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx M ...
随机推荐
- Python开发【源码剖析】 List对象
前言 本文探讨的Python版本为2.7.16,可从官网上下载,把压缩包Python-2.7.16.tgz解压到本地即可 需要基本C语言的知识(要看的懂) PyListObject对象 PyListO ...
- TweenLite参数用法中文介绍
TweenLite是一个缓动的类包,功能强大,并且易于使用,为了更多的(E文欠佳的.初学的)朋友了解它,使用它,特此翻译了一下TweenLite类文档中的说明文件,主要是对参数的说明,希望对大家有用. ...
- 从Harbor仓库拉起镜像,创建容器并更新shell脚本
注意: 此shell脚本仅供基本使用,还有好多待完善的地方 大致流程 使用Jenkins从Gogs拉取仓库代码,根据选择的参数和输入的标签,确定要编译打包jar的模块,以及要制作的docker镜像信息 ...
- idea常用插件安装
1.IDEA Restart IDEA没有重启的选项,这个工具就是来弥补这个功能,可以在File-->Restart 重启,也可以使用快捷键 CTRL + ALT + R 2.Maven He ...
- DevExtreme学习笔记(一)treeView(搜索固定、节点展开和收缩)注意事项
var treeConfig1 = dxConfig.treeView(obj_Question.treeDataSource1); treeConfig1.selectionMode = 'sing ...
- 5_PHP数组_3_数组处理函数及其应用_1_快速创建数组的函数
以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. 一.快速创建数组的函数 1. range() 函数 程序: <?php $numbers = range(1 ...
- glfw内存泄露测试
1. glfwInit() 和 glfwTerminate() 放在主线程 循环次数 1 内存 14M 循环次数100 46M 循环次数1000 49M 2. glfw ...
- idea 控制台允许输入
打开idea配置文件添加 -Deditable.java.test.console=true
- MySQL Hardware--RAID卡常用信息查看
MegaRAID信息查看 #查raid卡信息(生产商.电池信息及所支持的raid级别) /usr/local/sbin/MegaCli -AdpAllInfo -aALL |grep -E " ...
- Python——Int&Bool
整数类型: int类型,多用于数字运算 print(666) print(6+1) 整数类型转换: v1 = 666 v2 = str(v1) #会得出字符串的666 v1 = True v2 = i ...