zoukankan      html  css  js  c++  java
  • 《Windows核心编程》第一讲 对程序错误的处理

    一个Windows函数通常都有一个有意义的返回值类型,它标志着这个函数的运行状态,即函数运行成功与否。windows常用的函数类型如下图:

    Windows常用函数返回值类型

    从系统内部来讲,当一个Windows函数检测到一个错误时,它会使用一个成为线程本地存储器(thread-local storage)的机制,将相应的错误代码号码与调用的线程关联起来。因此线程之间能够相互独立地运行,而不会影响各自的错误代码。若要确定函数返回值指明的错误,可以调用GetLastError函数。然而该函数只返回线程的32位错误代码。因为该函数得到的是最后一个错误信息,因此必须在函数运行失败后立即调用该函数,否则该函数返回信息可能由于调用了其他的函数而被改写。

    WinError.h头文件包含了Microsoft公司定义的错误代码的列表。对每个错误都包含三部分信息:一个消息ID(与GetLastError的返回值对应),消息文本(对错误的英文描述)和一个号码。

    那么在使用GetLastError得到错误代码之后,如何得到其错误文本信息呢,在将程序交付给用户的时候,只有清晰的错误文本信息才能更明白说明函数调用问题。可以使用FormatMessage函数:

    DWORD FormatMessage(
            DWORD dwFlags,
            LPCVOID pSource,
            DWORD dwMessageId,
            DWORD dwLanguageId,
            PTSTR pszBuffer,
            DWORD nSize,
            va_list *Arguments);
    

    第四个参数dwMessageId,即需要查询文本信息的错误代码ID,可以有GetLastErorr函数获取。

    FormatMessage函数调用方式如下:

    FormatMessage(
             FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS |
             FORMAT_MESSAGE_ALLOCATE_BUFFER, 
             NULL, dwError, systemLocale, 
             (PTSTR) &hlocal, 0, NULL);


    注:在运行或者自己写Windows核心编程中的函数时可能会发现程序无法运行,这需要更新windows platform sdk,在 http://www.microsoft.com/en-us/download/default.aspx搜索合适版本下载即可。

  • 相关阅读:
    调优Java virtual machine常见问题汇总整理
    Social Media POC KT Session
    框架Hibernate笔记系列 基础Session
    JVM相关命题的博客整理及总结
    项目总结笔记系列 wsTax KT Session1
    项目总结笔记系列 Autonomy IDOL Server KT Session1
    项目总结笔记系列 Maven Session2
    项目总结笔记系列 Maven Session1
    Data Structures/Algorithms 小甲鱼99讲笔记系列(1~~15讲)
    循环有序数组查找
  • 原文地址:https://www.cnblogs.com/pangblog/p/3292308.html
Copyright © 2011-2022 走看看