| 数据类型 | 表示失败的值 |
| 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文档,以确保能正确检查潜在的错误 |

图1-1 在Visual Studio 6.0 的Wa t c h 窗口中键入“@ e r r, h r ”,就可以查看当前线程的最后错误代码
Visual studio 还配有一个小的实用程序,称为Error Lookup 。可以使用Error Lookup将错误代码的号码转换成相应文本描述(见图1 - 2 )。

表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 =错误 |