错误处理

来源:互联网 发布:淘宝赚佣金平台 编辑:程序博客网 时间:2024/06/06 10:07

windows函数是如何进行错误处理的。调用windows函数时,它会先验证我们传给它的参数,然后开始执行任务。如何传入的参数无效,或者由于其它原因导致操作无法执行,则函数的返回值将指出函数因为某些原因失败了。

常见的windows函数返回值数据类型。

void     这个函数不会失败。

bool    失败返回0,成功返回非0。应该避免测试返回值是否为TRUE,最稳妥的做法是检查它是否  不为FALSE。

HANDLE   失败返回NULL,否则,HANDLE将标识一个可以操纵的对象。注意这种返回值 ,因为某些函数会返回为INVALID_HANDLE_VALUE的一个句柄值 ,它被定义为-1。

函数的platform sdk 文档清楚说明了函数返回是NULL  还是INVALID_HANDLE_VALUE来标识失败。

PVOID  失败返回NULL  。成功,PVOID将标识一个数据块的内在地址。

LONG /DWORD   比较复杂 查MSDN

 

通常情况 下,如果windows函数能返回错误代码,将有助于我们理解函数为什么调用失败。错误 代码列表,列出了所有有可能的错误代码,为其分配了32位编号。

线程本地存储区(thread-local storage)与主调线程或者说是发出调用的线程 calling thread.关联在一起。

::GetLastError         DWORD  GetLastError(void)   返回由上一个函数调用设置的线程的32位错误代码。  在WinError.h  文件中,有定义。ERROR_SUCCESS 查声明可以找到此文件。或找MSDN 。 或visual studio  自带的Error  LookUp   工具。 工具---外部工具---errlook 工具     \vs2008\Common7\Tools\errlook.exe 添加进去即可。

 

在调试程序时,对上一个错误代码进行监视是相当有用的。  $err,hr      ,hr 是个限定符。

 

在Visual C++ 中,可以在监视窗口添加 $err,hr 一行来实时现实错误。调试过程中,该项相当于在每次调用API函数之后调用GetLastError函数。其值由两部分组成,一个是错误代码(十六进制),另一个是错误代码所对应的文本提示。该方法支持多语言。

 

定义自己的错误代码    void   SetLastError(DWORD  dwErrorCode) 传递合适的32位值。

 

window 提供了一个函数,可将错误码转化为相应的文本描述。 FormatMessage  MSDN上有例子。

 

用C++编程会遇到的一些
基本类型的错误:
● 编译错误。这类错误发生在代码编译阶段,后果是无法生成目标文件。这种错误可
能是语法错误,意思是编译器无法理解某些代码。语法错误经常是由像输入错误这
样的简单错误导致的。编译器还能发出警告。尽管通常情况下不必在意警告,但还
是应该将它们当做错误来对待,进行修复并重新编译。
● 链接错误。这类错误发生在链接过程中,并可能提示无法找到程序的某些外部引用。
解决办法通常是调整程序中出现问题的引用关系,然后重新编译/链接。
● 运行时错误。这类错误发生在可执行文件的运行过程中。如果程序执行了某些非法
操作,那么有可能突然崩溃。但是有一种更难以捉摸的运行时错误(逻辑错误)能让
程序以出人意料的方式运行。如果您曾经玩过某个游戏,里面的某个角色能在空中
行走(而这个角色不应该有能力在空中行走),那么所看到的就是一个逻辑错误。