windows核心编程--函数返回错误

windows核心编程--函数返回错误

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的调用会覆盖调前面的错误

windows核心编程--函数返回错误_第1张图片

图1-1 在Visual Studio 6.0 的Wa t c h 窗口中键入“@ e r r, h r ”,就可以查看当前线程的最后错误代码

Visual studio 还配有一个小的实用程序,称为Error Lookup 。可以使用Error Lookup将错误代码的号码转换成相应文本描述(见图1 - 2 )。

windows核心编程--函数返回错误_第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 =错误    
 

你可能感兴趣的:(windows核心编程--函数返回错误)