您的位置:首页 > 编程语言

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文档,以确保能正确检查潜在的错误
Wi n E r r o r. h 头文件包含了M i c r o s o f t 公司定义的错误代码的列表,每个错误都有三种表示,例如下面:

// 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 ~30292827~1615~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 =错误  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: