• 注册
  • 关于作者
    企业认证:趣记站长
    关注 6 粉丝 4 喜欢 9 内容 992
    江西省·南昌市
    聊天 送礼
    • 查看作者
    • Windows函数错误处理

         当调用一个Windows函数时,它首先要检验传递给它的各个参数的有效性,然后再设法执行任务.如果传递一个无效参数,或者由于某种原因无法执行这项操作,那么操作系统就会返回一个值,指明该函数在某种程度上运行失败了。

         Windows函数常用的返回值类型:

              void

              BOOL:0,非0,TURE,FALSE

              HANDLE:HANDLE,NULL,INVALID_HANDLE_VALID)

              PVOID:NULL,PVOID

              LONG/DWORD:具体函数而定

              ...

         Microsoft编译了一个所有可能的错误代码列表,

      Win32程序函数调用时堆栈变化情况分析
      Windows的多线程程序设计初步,Windows应用程序设计的基本术语,句柄的本质,Windows完成端口编程,Windows任务管理器开发原理与实现,Windows 2000下Api函数的拦截分析,Win32开发中最易踏上的地雷,windows系统文件详解,Window 消息大全使用详解,利用HOOK拦截封包原理,消息钩子函数入门篇,用Win32 API实现串行通信,Windows编程中的映射模式和坐标转换,Win32程序函数调用时堆栈变化情况分析,分析与理解通知消息-WM_NOTIFY,Windows函数错误处理,WINDOWS数据类型,注册ActiveX控件的几种方法,托盘编程,串行通信与重叠I/O
      WINDOWS编程

      并且为每个错误代码分配了一个32位的号码. WinError.h头文件(大约2万多行)包含了Micorsoft定义的错误代码列表.

         当一个Windows函数检测到一个错误时,它会使用线程本地存储(thread-local storage)机制,将相应的错误代码号码与调用的线程关联起来.这将使线程能够互相独立的运行,而不会影响各自的错误代码.

         当函数返回时,它的返回值就能指明是否有错误发生,若有且要确定是什么错误,就需要调用DWORD GetLastError()函数,它返回线程的32位错误代码.Visual Studio有一个Error Lookup程序可用将错误代码的号码换成相应文本描述.Windows还提供了一个函数FormatMessage可以将错误代码转换成它的文本描述.

      DWORD FormatMessage(

        DWORD dwFlags,      // source and processing options

        LPCVOID lpSource,   // message source

        DWORD dwMessageId,  // message identifier

        DWORD dwLanguageId, // language identifier

        LPTSTR lpBuffer,    // message buffer

        DWORD nSize,        // maximum size of message buffer

        va_list *Arguments  // array of message inserts

      );

        我们也可以在自己的函数中使用该机制,只需要使用VOID SetLastError(DWORD dwErrCode)函数即可,如果WinError.h中的任何代码都不能正确地反映该错误的性质,那么可以创建你自己的代码。错误代码的域的划分表:

      位        31~30          29              28       27~16          15~0

      内容      严重性      Microsoft/客户    保留     设备代码      异常代码

      含义      0=成功      0=MS定义的代码   必顺是0   由MS定义       由MS或客户定义

                1=参考

                2=警告      1=客户定义的代码

                3=错误

      注:如果创建自己的错误代码,必顺使29位为1.

      Win32程序函数调用时堆栈变化情况分析
      Windows的多线程程序设计初步,Windows应用程序设计的基本术语,句柄的本质,Windows完成端口编程,Windows任务管理器开发原理与实现,Windows 2000下Api函数的拦截分析,Win32开发中最易踏上的地雷,windows系统文件详解,Window 消息大全使用详解,利用HOOK拦截封包原理,消息钩子函数入门篇,用Win32 API实现串行通信,Windows编程中的映射模式和坐标转换,Win32程序函数调用时堆栈变化情况分析,分析与理解通知消息-WM_NOTIFY,Windows函数错误处理,WINDOWS数据类型,注册ActiveX控件的几种方法,托盘编程,串行通信与重叠I/O
      WINDOWS编程

    • 0
    • 0
    • 0
    • 62
    • 单栏布局 侧栏位置: