windows核心编程--函数返回错误
2007-01-17 22:08
176 查看
1 windows程序错误的处理机制
windows API的返回类型
数据类型 | 表示失败的值 |
V O I D | 该函数的运行不可能失败。Wi n d o w s 函数的返回值类型很少是V O I D |
B O O L | 如果函数运行失败,那么返回值是0 ,否则返回的是非0 值。最好对返回值进行测试,以确定它是0 还是非0 。不要测试返回值是否为T R U E |
H A N D L E | 如果函数运行失败,则返回值通常是N U L L ,否则返回值为H A N D L E ,用于标识你可以操作的一个对象。注意,有些函数会返回一个句柄值I N VALID_ HANDLE_VA L U E ,它被定义为- 1 。函数的Platform SDK 文档将会清楚地说明该函数运行失败时返回的是N U L L 还是I N VA L I D _ H A N D L E _ VA L I D |
P V O I D | 如果函数运行失败,则返回值是N U L L ,否则返回P V O I D ,以标识数据块的内存地址 |
L O N G / D W O R D | 这是个难以处理的值。返回数量的函数通常返回L O N G 或D W O R D 。如果由于某种原因,函数无法对想要进行计数的对象进行计数,那么该函数通常返回0 或- 1 (根据函数而定)。如果调用的函数返回了L O N G / D W O R D ,那么请认真阅读Platform SDK文档,以确保能正确检查潜在的错误 |
// MessageId: ERROR_PATH_NOT_FOUND
// MessageText:
// The system cannot find the path specified.
#define ERROR_PATH_NOT_FOUND 3L
当有错误发生时,可以通过下面函数得到错误的id,
DWORD GetLastError();
也可以通过下面函数由id得到对应的text:
DWORD FormatMessage(
DWORD dwFlags, // source and processing options
LPCVOID lpSource, // pointer to message source
DWORD dwMessageId, // requested message identifier
DWORD dwLanguageId, // language identifier for requested message
LPTSTR lpBuffer, // pointer to message buffer
DWORD nSize, // maximum size of message buffer
va_list *Arguments // pointer to array of message inserts
);
当调用一个API出现错误时,可以立即通过一下方法查看错误,但是后面的API的调用会覆盖调前面的错误
图1-1 在Visual Studio 6.0 的Wa t c h 窗口中键入“@ e r r, h r ”,就可以查看当前线程的最后错误代码
Visual studio 还配有一个小的实用程序,称为Error Lookup 。可以使用Error Lookup将错误代码的号码转换成相应文本描述(见图1 - 2 )。
用户也可以定义自己的错误代码,但是要建立正确的32位的id哦,不能与系统的冲突啊.
表1-2 错误代码的域
位 | 3 1 ~30 | 29 | 28 | 27~16 | 15~0 |
内容 | 严重性 | M i c r o s o f t/客户 | 保留 | 设备代码 | 异常代码 |
含义 | 0 =成功 | 0 =M i c r o s o f t公司定义的代码 | 必须是0 | 由M i c r o s o f t公司定义 | 由Microsoft/客户定义 |
1 =供参考 | 1 =客户定义的代码 | ||||
2 =警告 | |||||
3 =错误 |
相关文章推荐
- C语言中返回错误信息的相关函数用法总结
- 解决c/c++函数返回局部变量char*的错误
- 错误日记 函数返回数组
- 64位平台上,函数返回指针时遇到的段错误问题
- system函数错误返回-1 错误原因NO child processes
- Windows Server 2008 R2 不支持直接输出日期时间,导致“函数返回 |”错误。
- println()函数输出int类型返回值错误的问题
- 设计原则-----函数返回错误还是抛出异常
- VB中的RasEnumConnections函数返回632错误解决方法
- linux下system函数错误返回-1,错误原因NO child processes的解决办法
- RegQueryValueEx函数返回234错误解决方法
- (轉)函数返回设计以及错误处理
- 使用recvfrom()函数,返回10054错误的问题
- RegQueryValueEx函数返回234错误解决方法
- 函数设计之美--函数需要返回错误码吗(一)?
- 函数设计之美--函数需要返回错误码吗(一)?
- curl 函数执行了之后返回false解决,打印错误信息返回PHP的Curl出现:curl call error(77): Problem with the SSL CA cert (path? ac
- C语言strerror()函数:返回错误原因的描述字符串
- linux下system函数错误返回-1 错误原因NO child processes
- 构造函数不能有返回类型 ,函数定义或声明中有错误;未调用函数