读Windows核心编程-1-错误处理
(1)错误处理
Windows函数通常以以下几种方式表示函数调用出错:
一旦函数调用出错,应立即调用GetLastError来取回错误代码。
DWORD GetLastError()
GetLastError返回存储于线程局部存储(TLS)的错误代码,因此多线程情况下各个线程的错误代码不会互相干扰。
所有的错误代码可以在WinError.h中找到,每个错误都有三个相关信息:
- 错误消息ID(一个宏);
- 错误消息文本;
- 错误编号(应避免直接使用,应尽量使用错误消息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-错误处理相关推荐
- 对程序错误的处理——Windows核心编程学习手札之一
对程序错误的处理 --Windows核心编程学习手札之一 函数被调用执行时,先检验传递给它的各个参数的有效性,后执行任务.函数执行中若因参数无效或因某种原因导致无法正常完成函数任务,那么操作系统会返回 ...
- Windows核心编程之核心总结(第一章 错误处理)(2018.5.26)
前沿 学习Windows核心编程是步入Windows编程殿堂的必经之路,2018年寒假重温了计算机操作系统知识,前阵子又过学习Windows程序设计方面的基础,正所谓打铁要乘热,所以我又入了Windo ...
- 未处理异常和C++异常——Windows核心编程学习手札之二十五
未处理异常和C++异常 --Windows核心编程学习手札之二十五 当一个异常过滤器返回EXCEPTION_CONTINUE_SEARCH标识符时是告诉系统继续上溯调用树,寻找另外的异常过滤器,但当每 ...
- [笔记]Windows核心编程《十三》windows内存体系结构
系列文章目录 [笔记]Windows核心编程<一>错误处理.字符编码 [笔记]Windows核心编程<二>内核对象 [笔记]Windows核心编程<三>进程 [笔记 ...
- Windows核心编程_HOOK(续)_APIHOOK
啰嗦啰嗦: 开始之前还是要啰嗦几句,看到自己博客粉丝增加,访问量也越来越多,感到非常开心,而且好评也是不少,指错也非常感谢,从错误中发现了很多问题,非常感谢,也高兴自己的文章能帮助到其它人. 就比如之 ...
- C++Windows核心编程读书笔记(转)
http://www.makaidong.com/(马开东博客) 这篇笔记是我在读<windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的 ...
- [C++]《Windows核心编程》读书笔记
这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入 ...
- 《windows核心编程系列》二谈谈ANSI和Unicode字符集
第二章:字符和字符串处理 使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是 ...
- 《windows核心编程系列》十八谈谈windows钩子
windows应用程序是基于消息驱动的.各种应用程序对各种消息作出响应从而实现各种功能. windows钩子是windows消息处理机制的一个监视点,通过安装钩子能够达到监视指定窗体某种类型的消息的功 ...
- 异常处理程序和软件异常——Windows核心编程学习手札之二十四
异常处理程序和软件异常 --Windows核心编程学习手札之二十四 CPU负责捕捉无效内存访问和用0除一个数值这种错误,并相应引发一个异常作为对错误的反应,CPU引发的异常称为硬件异常(hardwar ...
最新文章
- win10直接获得文件绝对路径的方法总结
- oracle建立dblink
- 用SAP BSP应用实现图片灰度效果
- (设计模式)简单工厂模式之通过配置文件动态创建实现类
- 谷歌爬虫ua_Python爬虫,实战爬取腾讯视频评论!
- 把服务器文件,如何把文件放在服务器
- Mybatis传递多个参数
- 固高GTS运动控制卡,C#语言三轴点胶机样本程序源代码
- linux系统串口dmx512,基于stm32实现DMX512协议发送与接收详解
- 基于STC89C52单片机的智能灯光毕业设计论文
- python-docx插入图片调整为封面图
- 孕妇适合吃哪些蔬菜?这三种蔬菜很有营养
- PO、VO、DO、TO、DTO、 BO、 QO、DAO、POJO
- 音乐music says
- Win 7/Win 8/Win 10/Windows Server 下安装和使用OpenSSH客户端
- 侯捷c++系统工程师:全方位提升技能素养 侯捷C++视频全系列合集
- 弘辽科技:淘宝劳动节活动什么时候开始呢?商家要准备什么呢?
- TXT阅读器 C# winfrom 开发
- android手机速度太慢,手机反应特别慢的原因和处理方法
- php生成随机数方法,php生成随机数的3种方法
热门文章
- 又接触到自己以前建立的计算系统,有点震惊
- pythonos文件目录方法_python12-OS模块(文件/目录方法)
- C# 读写txt文件 写txt(IO) TXT追加
- hiveserver2启动不起来_125踏板车电启动发不着时,为什么很少用户使用脚启动?...
- centos下java编程工具_centos下安装JAVA开发工具(4)------Redis
- java动态代理_Java核心 -- 动态代理
- linux boa post方式失败,移植boa出现的错误及解决方法
- oracle 修改sga参数,oracle 参数文件的修改,sga pga参数的修改
- 批量修改mac系统文件的可读写权限
- Oracle+Mybatis模糊查询