windows VIA C/C++ 之Error Handing
来源:互联网 发布:mac口红滋润系列 编辑:程序博客网 时间:2024/04/29 06:39
各种返回类型的Windows函数执行中出现错误时的返回值为:
VOID,不可能出现错误,没有返回值。
BOOL,错误返回0,否则为非0。
HANDLE,错误一般返回NULL或INVALID_HANDLE_VALUE(-1),否则为有效HANDLE值。
PVOID,错误返回NULL,否则返回有效指针。
LONG/DWORD,错误通常返回0或-1,但不可一概而论,具体以platform SDK的相关文档为准。
GetLastError函数,windows有一种叫作Thread-Local Storage的机制,当本线程的windows函数返回时,同时得到其执行错误时的相应的错误代码。这些错误代码在winerr.h中得到定义。GetLastError返回的是最后一个执行的函数相对应的错误代码,可能被下一个函数的执行结果(即使是执行成功)覆盖。
每个错误都有三种表达方式:纯数字,如2;相应的在winerr.h中定义的宏,如ERROR_ALREADY_EXISTS;相应的文字描述,可以从FormatMesage函数或VS的tool/error lookup工具中得到;VS在调试状态时有一种比较便捷的方式可以即时看到当前错误代码及描述,在Watch窗口中输入”@err,hr”(VS6.0)或”$err.hr”(VS2005),其中’hr’的作用是得到错误描述。
ForamtMesaage函数是一个不错的得到错误文字描述信息并显示出来的手段,而且可以选择不同的语言,比较扯的是,前提是要在资源中为这些描述信息进行翻译。
SetLastError函数,用来给自己写的函数定义32位ERROR值,需要注意的是,如果这个ERROR值不沿用windows系统winerr.h文件中已定义的值而是自己定义的话,为了不与微软的现有或保留值相冲突需要注意:(31-0位中)第29位必须为1,27-16位(共有4096个值)的前256个值不能使用。下为具体各位的含义,引用自window via c/c++书中原文:
Bits: 31-30 29 28 27-16 15-0 Contents Severity Microsoft/customer Reserved Facility code Exception code Meaning 0=Success 1 = Informational 2 = Warning 3 = Error 0 = Microsoft-defined code 1 = customer-defined code Must be 0 The first 256 values are reserved by Microsoft Microsoft/customer-defined code
- windows VIA C/C++ 之Error Handing
- 《windows via C++》之精华
- 《windows via C++》之windows线程同步
- 《windows via C++》之windows线程同步
- 《windows via C++》之windows线程同步
- windows VIA C/C++ 之关于WIN64
- windows VIA C/C++ 之 Character Encodings
- windows via c/c++
- Windows via c/c++
- Windows Via C/C++
- Halcon C#.net 编程指导(5): 异常处理(Error Handing)
- windows via c/c++ 读书笔记
- Windows Via C/C++ 读书笔记
- 《Windows Via C/C++》边学习,边翻译(一)错误处理(Error Handling)
- Windows Via C/C++: The CreateProcess function
- Windows via C/C++:终止进程
- Windows via C/C++: 子进程
- Windows Via C/C++:线程概述
- Spring中使用Parent和Abstract简化多数据源的配置
- 重温MFC.
- 在网页加代码强制IE8使用兼容性视图解决网页显示不正确的办法
- 浅谈Linux PCI设备驱动(二)
- Python 2.7 Tutorial —— 流程控制
- windows VIA C/C++ 之Error Handing
- 继续努力 奋斗
- sicily 1007
- 一根白头发
- GIF、JPEG 和 PNG的区别
- J2ME 关于时间
- 清华谷歌笔试题
- AVL树头文件C语言(AVLTree.h)
- 终于明白为什么无参数函数名,以及函数指针定义时参数列表一定要写上(void)而不是空着了