当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++基础入门教程

对windows编程中的错误处理

    开始windows编程之前,要了解windows函数是怎么做错误处理的。

    当调用一个windows函数的时候。它首先检查传递给它的各个参数的有效性,然后再设法做处理。

    当传入一个错误的参数或操作在处理过程中出现不成功,则返回一个值。

    当返回值是VOID的时候,是不可能错误的。

    当返回值是LONG/DWORD的时候。windows处理比较复杂。一般如果返回0或-1 表示不能计数。

    Microsoft公司编译了一个错误表,为每个错误分配一个32位的号码。当发生错误的时候。可以调用GetLastError()函数,得到最近的错误。注意:该函数只返回32位的错误号。

    WinError.h中包含了错误代码的列表。这个文件的列表内容是这样的:

    //MessageId: ERROR_SUCCESS

    //MessageText:

    //

    //The operation completed successfully.

    //

    #define ERROR_SUCCESS  0L

    ... ...

    每个错误都是这样描述的:错误ID号,错误文本,错误号码(一般,应该避免使用号码,可以使用ID号)。

    同时记住:当windows函数运行失败,请立即运行GetLastError()函数进行错误处理。但是,当windows函数运行成功,它就不会改写错误代码,并不指明运行成功。(当然有例外)

    在windows98中,不能使用这种机制来发现错误。因为,windows98很大部分是16位函数。

    在调试的时候,在Watch窗口中输入“@err,hr”,就可以显示最后一个函数调用时的错误号码和错误英文描述文本

    如果在程序编写中,想把错误显示给用户看,windows提供了一个函数:FormatMessage定义如下:

    DWORD FormatMessage(DWORD dwFlags , LPCVOID pSource , DWORD MessageID , DWORD dwLanguageID ,

    PTSTR pszBuffer , DWORD nSize , va_list * Arguments );

    FormatMessage()函数的功能非常丰富,向用户显示消息,它是首选函数。后面会展示该函数的用法。

    以上是windows的错误处理机制,你也可以在你的程序中使用这种机制。

    将你认为合适的号码传给windows的线程池调用下面的函数:SetLastError(DWORD dwErrCode);

    最好,能在WinError.h中存在的错误号。如果你实在是找不到反映你实际需要代码,可以自己创建错误号。

    错误号可以划分域的:31~30 表示严重性(0 表示成功 1 表示供参考 2 表示警告 3 表示错误)

    29 表示是用户定义的错误号还是是Microsoft定义:0 表示是Microsoft定义的 1 表示用户定义的。

    28 是保留 必须是0 。

    27~16 设备代码,由Microsoft定义。

    15~0 错误代码,由Microsoft或用户定义。

    这些,还会在以后的文章中涉及!

    下面开始是一个示例程序,重点展示如何使用FormatMessage函数:

 

共2页 首页 上一页 1 2 下一页 尾页 跳转到
相关内容
赞助商链接