C++ Programmer's Cookbook

{C++ 基础} {C++ 高级} {C#界面,C++核心算法} {设计模式} {C#基础}

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

o_SpxImage1.jpg

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

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

o_SpxImage2.jpg

用户也可以定义自己的错误代码,但是要建立正确的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 =错误    
 

posted on 2006-09-11 15:45 梦在天涯 阅读(1010) 评论(0)  编辑 收藏 引用 所属分类: Windows API


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

EMail:itech001#126.com

导航

统计

  • 随笔 - 461
  • 文章 - 4
  • 评论 - 746
  • 引用 - 0

常用链接

随笔分类

随笔档案

收藏夹

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

积分与排名

  • 积分 - 1747769
  • 排名 - 5

最新评论

阅读排行榜