(1)错误处理

Windows函数通常以以下几种方式表示函数调用出错:

一旦函数调用出错,应立即调用GetLastError来取回错误代码。

DWORD GetLastError()

GetLastError返回存储于线程局部存储(TLS)的错误代码,因此多线程情况下各个线程的错误代码不会互相干扰。

所有的错误代码可以在WinError.h中找到,每个错误都有三个相关信息:

  1. 错误消息ID(一个宏);
  2. 错误消息文本;
  3. 错误编号(应避免直接使用,应尽量使用错误消息ID)

Visual Studio可以在Watch中监视线程错误代码和文本,只需在Watch窗口输入@err,hr

向用户显示错误信息:

使用FormatMessage来向用户展示错误信息,该函数可支持多种自然语言。

DWORD FormatMessage(

DWORD dwFlags,

LPCVOID pSource,

DWORD dwMessageId,

DWORD dwLanguageId,

PTSTR pszBuffer,

DWORD nSize,

va_list *arguments);

示例代码如下:

DWORD dwError=ERROR_PATH_NOT_FOUND; //ERROR_SUCCESS;

HLOCAL hLocal=NULL;

DWORD systemLocale = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);

BOOL fOK = FormatMessage(

FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER,

NULL, dwError, systemLocale, (PTSTR)&hLocal, 0, NULL);

If (!fOK) {

HMODULE hDll = LoadLibraryEx(_T("netmsg.dll"), NULL, DONT_RESOLVE_DLL_REFERENCES);

If (hDll != NULL){

fOK = FormatMessage(

FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER,

NULL, dwError, systemLocale, (PTSTR)&hLocal, 0, NULL);

FreeLibrary(hDll);

}

}

If (fOK && (NULL != hLocal)){

tcout<<(PCTSTR)LocalLock(hLocal)<<endl;

LocalFree(hLocal);

}

自定义错误代码

使用SetLastError可以设置我们认为合适的32错误代码

VOID SetLastError(DWORD dwErrCode);

错误代码各个字段如下:

(EOF)

转载于:https://www.cnblogs.com/dlbrant/archive/2013/05/26/3099845.html

读Windows核心编程-1-错误处理相关推荐

  1. 对程序错误的处理——Windows核心编程学习手札之一

    对程序错误的处理 --Windows核心编程学习手札之一 函数被调用执行时,先检验传递给它的各个参数的有效性,后执行任务.函数执行中若因参数无效或因某种原因导致无法正常完成函数任务,那么操作系统会返回 ...

  2. Windows核心编程之核心总结(第一章 错误处理)(2018.5.26)

    前沿 学习Windows核心编程是步入Windows编程殿堂的必经之路,2018年寒假重温了计算机操作系统知识,前阵子又过学习Windows程序设计方面的基础,正所谓打铁要乘热,所以我又入了Windo ...

  3. 未处理异常和C++异常——Windows核心编程学习手札之二十五

    未处理异常和C++异常 --Windows核心编程学习手札之二十五 当一个异常过滤器返回EXCEPTION_CONTINUE_SEARCH标识符时是告诉系统继续上溯调用树,寻找另外的异常过滤器,但当每 ...

  4. [笔记]Windows核心编程《十三》windows内存体系结构

    系列文章目录 [笔记]Windows核心编程<一>错误处理.字符编码 [笔记]Windows核心编程<二>内核对象 [笔记]Windows核心编程<三>进程 [笔记 ...

  5. Windows核心编程_HOOK(续)_APIHOOK

    啰嗦啰嗦: 开始之前还是要啰嗦几句,看到自己博客粉丝增加,访问量也越来越多,感到非常开心,而且好评也是不少,指错也非常感谢,从错误中发现了很多问题,非常感谢,也高兴自己的文章能帮助到其它人. 就比如之 ...

  6. C++Windows核心编程读书笔记(转)

    http://www.makaidong.com/(马开东博客) 这篇笔记是我在读<windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的 ...

  7. [C++]《Windows核心编程》读书笔记

    这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入 ...

  8. 《windows核心编程系列》二谈谈ANSI和Unicode字符集

    第二章:字符和字符串处理 使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是 ...

  9. 《windows核心编程系列》十八谈谈windows钩子

    windows应用程序是基于消息驱动的.各种应用程序对各种消息作出响应从而实现各种功能. windows钩子是windows消息处理机制的一个监视点,通过安装钩子能够达到监视指定窗体某种类型的消息的功 ...

  10. 异常处理程序和软件异常——Windows核心编程学习手札之二十四

    异常处理程序和软件异常 --Windows核心编程学习手札之二十四 CPU负责捕捉无效内存访问和用0除一个数值这种错误,并相应引发一个异常作为对错误的反应,CPU引发的异常称为硬件异常(hardwar ...

最新文章

  1. win10直接获得文件绝对路径的方法总结
  2. oracle建立dblink
  3. 用SAP BSP应用实现图片灰度效果
  4. (设计模式)简单工厂模式之通过配置文件动态创建实现类
  5. 谷歌爬虫ua_Python爬虫,实战爬取腾讯视频评论!
  6. 把服务器文件,如何把文件放在服务器
  7. Mybatis传递多个参数
  8. 固高GTS运动控制卡,C#语言三轴点胶机样本程序源代码
  9. linux系统串口dmx512,基于stm32实现DMX512协议发送与接收详解
  10. 基于STC89C52单片机的智能灯光毕业设计论文
  11. python-docx插入图片调整为封面图
  12. 孕妇适合吃哪些蔬菜?这三种蔬菜很有营养
  13. PO、VO、DO、TO、DTO、 BO、 QO、DAO、POJO
  14. 音乐music says
  15. Win 7/Win 8/Win 10/Windows Server 下安装和使用OpenSSH客户端
  16. 侯捷c++系统工程师:全方位提升技能素养 侯捷C++视频全系列合集
  17. 弘辽科技:淘宝劳动节活动什么时候开始呢?商家要准备什么呢?
  18. TXT阅读器 C# winfrom 开发
  19. android手机速度太慢,手机反应特别慢的原因和处理方法
  20. php生成随机数方法,php生成随机数的3种方法

热门文章

  1. 又接触到自己以前建立的计算系统,有点震惊
  2. pythonos文件目录方法_python12-OS模块(文件/目录方法)
  3. C# 读写txt文件 写txt(IO) TXT追加
  4. hiveserver2启动不起来_125踏板车电启动发不着时,为什么很少用户使用脚启动?...
  5. centos下java编程工具_centos下安装JAVA开发工具(4)------Redis
  6. java动态代理_Java核心 -- 动态代理
  7. linux boa post方式失败,移植boa出现的错误及解决方法
  8. oracle 修改sga参数,oracle 参数文件的修改,sga pga参数的修改
  9. 批量修改mac系统文件的可读写权限
  10. Oracle+Mybatis模糊查询