定义自己的错误代码
2013-01-29 15:53
183 查看
可以通过了解Windows的各个函数的错误处理机制,可以定义自己的错误代码。
一个Wi n d o w s 函数返回的错误代码对了解该函数为什么会运行失败常常很有用。M i c r o s o f t公司编译了一个所有可能的错误代码的列表,并且为每个错误代码分配了一个3 2 位的号码。
从系统内部来讲,当一个Win d o w s 函数检测到一个错误时,它会使用一个称为线程本地存储器(thread-local storage )的机制,将相应的错误代码号码与调用的线程关联起来。这将使线程能够互相独立地运行,而不会影响各自的错误代码。当函数返回时,它的返回值就能指明一个错误已经发生。若要确定这是个什么错误,请调用G e t L a s t E r r o r 函数:
当你拥有3 2 位错误代码的号码时,必须将该号码转换成更有用的某种对象。Wi n E r r o r. h 头文件包含了M i c r o s o f t 公司定义的错误代码的列表。
如果在编写的应用程序中发现一个错误,可能想要向用户显示该错误的文本描述。Wi n d o w s 提供了一个函数FormatMessage(),可以将错误代码转换成它的文本描述。
前面已经说明Wi n do w s 函数是如何向函数的调用者指明发生的错误,你也能够将该机制用于自己的函数。比如说,你编写了一个希望其他人调用的函数,你的函数可能因为这样或那样的原因而运行失败,你必须向函数的调用者说明它已经运行失败。
若要指明函数运行失败,只需要设定线程的最后的错误代码,然后让你的函数返回FA L S E 、I N VA L I D _ H A N D L E _ VA L U E 、N U L L 或者返回任何合适的信息。若要设定线程的最后错误代码,只需调用下面的代码:
请将你认为合适的任何3 2位号码传递给该函数。尝试使用Wi n E r r o r. h 中已经存在的代码,
VOID SetLastError(DWORDdwErrCode);
只要该代码能够正确地指明想要报告的错误即可。如果你认为Wi n E r r o r. h 中的任何代码都不能正确地反映该错误的性质,那么可以创建你自己的代码。错误代码是个3 2 位的数字,划分成表1-2所示的各个域。
需要知道的重要域是第2 9位。M i c r o s o f t 公司规定,他们建立的所有错误代码的这个信息位均使用0 。如果创建自己的错误代码,必须使2 9 位为1 。这样,就可以确保你的错误代码与M i c r o s o f t 公司目前或者将来定义的错误代码不会发生冲突。
参考资料:《Windows核心编程》
一个Wi n d o w s 函数返回的错误代码对了解该函数为什么会运行失败常常很有用。M i c r o s o f t公司编译了一个所有可能的错误代码的列表,并且为每个错误代码分配了一个3 2 位的号码。
从系统内部来讲,当一个Win d o w s 函数检测到一个错误时,它会使用一个称为线程本地存储器(thread-local storage )的机制,将相应的错误代码号码与调用的线程关联起来。这将使线程能够互相独立地运行,而不会影响各自的错误代码。当函数返回时,它的返回值就能指明一个错误已经发生。若要确定这是个什么错误,请调用G e t L a s t E r r o r 函数:
DWORD GetLastError(); //该函数只返回线程的32位错误代码
当你拥有3 2 位错误代码的号码时,必须将该号码转换成更有用的某种对象。Wi n E r r o r. h 头文件包含了M i c r o s o f t 公司定义的错误代码的列表。
如果在编写的应用程序中发现一个错误,可能想要向用户显示该错误的文本描述。Wi n d o w s 提供了一个函数FormatMessage(),可以将错误代码转换成它的文本描述。
前面已经说明Wi n do w s 函数是如何向函数的调用者指明发生的错误,你也能够将该机制用于自己的函数。比如说,你编写了一个希望其他人调用的函数,你的函数可能因为这样或那样的原因而运行失败,你必须向函数的调用者说明它已经运行失败。
若要指明函数运行失败,只需要设定线程的最后的错误代码,然后让你的函数返回FA L S E 、I N VA L I D _ H A N D L E _ VA L U E 、N U L L 或者返回任何合适的信息。若要设定线程的最后错误代码,只需调用下面的代码:
请将你认为合适的任何3 2位号码传递给该函数。尝试使用Wi n E r r o r. h 中已经存在的代码,
VOID SetLastError(DWORDdwErrCode);
只要该代码能够正确地指明想要报告的错误即可。如果你认为Wi n E r r o r. h 中的任何代码都不能正确地反映该错误的性质,那么可以创建你自己的代码。错误代码是个3 2 位的数字,划分成表1-2所示的各个域。
需要知道的重要域是第2 9位。M i c r o s o f t 公司规定,他们建立的所有错误代码的这个信息位均使用0 。如果创建自己的错误代码,必须使2 9 位为1 。这样,就可以确保你的错误代码与M i c r o s o f t 公司目前或者将来定义的错误代码不会发生冲突。
参考资料:《Windows核心编程》
相关文章推荐
- C++定义自己的错误代码(FormatMessage)
- 定义自己的错误代码
- Asp.net Futures 工程新建页解决“请确保此代码文件中定义的类与“inherits”属性匹配”的错误
- php中自己定义错误类型,包括致命错误(Fatal Error 或 E_ERROR)
- phonegap(cordova) 自己定义插件代码篇(五)----android ,iOS 集成微信登陆
- php中自己定义错误类型,包括致命错误(Fatal Error 或 E_ERROR)
- HTTP状态代码及其定义,Ajax捕捉回调错误参考
- HTML格式的语法高亮类库代码,内置对C, C++, VBScript, JScript, xml的支持,可扩展,自己添加语法定义。
- 自己收集整理的微软错误代码大全(中文和英文)
- nginx 设置错误的自己定义404页面跳转到500
- Java异常封装(自己定义错误码和描述,附源码)
- iOS自己捕获异常定位错误代码
- Android studio把一段代码快速提取,放在自己定义方法里面的快捷键
- thinkphp关于错误显示的问题 设置代码本身的错误提示 不让框架显示他自己的错误提示操作
- 自己收集整理的微软错误代码大全(中文和英文)
- Java实现分页功能 代码很粗糙,都是根据自己所需去定义逻辑功能的。
- xcode 定义自己的代码片段
- Java异常封装(自己定义错误码和描述,附源码)
- 2008-07-11 11:54 K3 10.3版 登录时出现 "定义的应用程序或对象错误" 错误代码:1726(6BEH) 的解决方法