《Windows核心编程》第一章 读书笔记
2010年06月03日
今天读《Windows核心编程》的第一章:错误处理,按照书上的例子写出了一个ErrorShow的例子,其中涉及到了挺多"核心"的东西,先记录下来与大家分享
首先我们需要一些基础知识。
调用Windows函数时,它会先验证我们传给他的参数,然后再开始执行任务。如果传入的参数无效,或者由于其他原因导致操作无法执行,则函数的返回值将给出函数因为某些原因失败了。
VOID这个函数不可能失败,只有极少数的Windows函数返回值类型为VOID
BOOL如果函数失败,返回值为0;否则,返回值是一个非0的值。应避免检测返回值是否为TRUE;最稳妥的办法是检测返回值是否不为FALSE。
HANDLE如果函数失败,则返回值通常为NULL;否则,HANDLE将标识一个可以操纵的对象。请注意这种返回值,因为某些函数会返回INVALID_HANDLE_VALUE的一个句柄值,它被定义为-1。函数的Platform SDK 文档清楚说明了函数是返回NULL 还是INVALID_HANDLE_VALUE。
PVOID 如果函数调用失败,则返回NULL;否则,PVOID将标识一个数据块的内存地址。
LONG/DWORD这种问题比较棘手。返回计数的函数通常会返回一个LONG或者DWORD。如果函数处于某种原因不能对我们想要计数的东西进行计数,它通常会返回0或-1(具体取决于函数)。如果要调用一个返回LONG/DWORD的函数,务必仔细阅读Platform SDK文档,确保我们会正确地检查可能出现的错误。
------摘自《Windows核心编程》
我们可以对这个错误代码用GetLastError()函数进行检测。
下边是我根据书本上的例子写的GetLastError的MFC程序,其中我只放上LookUp按钮的OnBnClickd事件
void CErrorShowDlg::OnBnClickedBtnLookup() { // TODO: 在此添加控件通知处理程序代码 //获取控件的int值 DWORD dwError = GetDlgItemInt(IDC_EDIT_ERROR, NULL, FALSE); //错误消息的Buffer HLOCAL hlocal = NULL; //this MAKELANGID combination has a balue of 0 DWORD systemLocal = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL); //获得错误代码的文字表示方法 BOOL fOK = FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, dwError, systemLocal, (PTSTR)&hlocal, 0, NULL ); if(!fOK) { HMODULE hDll = LoadLibraryEx(L"netmsg.dll", NULL, DONT_RESOLVE_DLL_REFERENCES); if(hDll != NULL) { fOK = FormatMessage( FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER, hDll, dwError, systemLocal, (PTSTR)&hlocal, 0, NULL ); FreeLibrary(hDll); } } if(fOK && (hlocal) != NULL) { SetDlgItemText(IDC_STA_ERRORMSG, (PCTSTR)LocalLock((hlocal))); LocalFree(hlocal); } else { SetDlgItemText(IDC_STA_ERRORMSG, L"No text found for this error number"); } } 其中需要说明的如下:
HLOCAL 在WinDef.h中发现
typedef HANDLE HLOCAL;
在WinNt.h中发现
typedef void *HANDLE;
原来HANDLE和HLOCAL就是void*。自我理解就是指向一块内存区域的指针。在改程序中,我们在FormatMessage中把它指向了生成的错误消息的文本。
发表评论
-
编译 boost
2012-01-20 00:30 524编译 boost 2011年05月17日 ... -
[转]如何把一个Windows Phone 7 Twitter应用转换成新浪微博客户端
2012-01-20 00:30 348[转]如何把一个Windows Phone 7 Twitter ... -
在windows xp下编译WebKit
2012-01-20 00:29 731在windows xp下编译WebKit 2010年10月2 ... -
Symbian OS S60三种开发环境的搭建,基于C++
2012-01-20 00:29 616Symbian OS S60三种开发环境的搭建,基于C++ ... -
计算机4级5.31---6。30
2012-01-19 01:27 527计算机4级5.31---6。30 2010年06月14日 ... -
多线程和多进程的区别
2012-01-19 01:27 709多线程和多进程的区别 2010年07月20日 很想写点关 ... -
多线程和多进程的区别(小结
2012-01-19 01:27 762多线程和多进程的区别(小结 2011年09月18日 多线 ... -
7月16号 键盘按键失灵? 蓝屏的终极处理?
2012-01-19 01:27 8387月16号 键盘按键失灵? 蓝屏的终极处理? 2011年07 ... -
如何培养一年级学生良好的学习习惯
2012-01-19 01:27 650如何培养一年级学生良好的学习习惯 2011年06月28日 ... -
毕生精力总结的电脑技巧。。
2012-01-17 00:43 392毕生精力总结的电脑技巧。。 2011年10月03日 声 ... -
Android基础知识~入门进阶,一步步走到高手
2012-01-17 00:43 596Android基础知识~入门进 ... -
android linux 基础知识总结(789)
2012-01-17 00:43 407android linux 基础知识总结(789) 2011 ... -
Java Me--丰富多彩的领域中生机勃勃的技术
2012-01-17 00:43 619Java Me--丰富多彩的领域 ... -
一步步安装原版雪豹10.6.3-10.6.6
2012-01-17 00:43 1960一步步安装原版雪豹10.6 ... -
系统调用、POSIX、C库、系统命令和内核函数
2012-01-15 19:32 733系统调用、POSIX、C库、 ... -
pv3d 2.0版本的一篇英文教程翻译 5 基础纹理
2012-01-15 19:32 780pv3d 2.0版本的一篇英文 ... -
papervision3D介绍及入门
2012-01-15 19:32 481papervision3D介绍及入门 2009年11月27日 ... -
Away3D Lite:Others
2012-01-15 19:32 972Away3D Lite:Others 2010年01月05日 ... -
Away3D Lite:ExMD2Cubic
2012-01-15 19:32 661Away3D Lite:ExMD2Cubic 2010年01 ...
相关推荐
昆虫记第一章读书笔记.doc
WINDOWS核心编程_笔记合集.zip
windows核心编程读书笔记六
python核心编程第15章学习笔记.pdf
python核心编程第15章学习笔记[借鉴].pdf
这个是python核心编程这本书的读书笔记,浓缩其精华,让你快速掌握要垫。
unix网络编程-第三版读书笔记unix网络编程-第三版读书笔记
高手编程笔记 蓝牙协议读书笔记 高手编程笔记 蓝牙协议读书笔记 高手编程笔记 蓝牙协议读书笔记
Java游戏编程读书笔记,Java游戏编程读书笔记
Java编程思想(第4版)读书笔记by CZFJava编程思想(第4版)读书笔记by CZFJava编程思想(第4版)读书笔记by CZF
USB读书笔记 USB读书笔记 USB读书笔记 USB读书笔记
核心编程-读书笔记的相关介绍,对每个章节都有描述希望对大家有所帮助
网上找到的Python编程金典读书笔记.txt
一本相当经典的书:Servlet与JSP核心编程;牛叉的读书笔记;很全很细,观点丰富,很有研究价值。
深入.NET平台和C#编程(.NETOOP)第一章-第九章
计算机网络设计第一章读书笔记------.pdf该文档详细且完整,值得借鉴下载使用,欢迎下载使用,有问题可以第一时间联系作者~
java核心,第一卷的读书笔记
读书笔记软件 编程笔记 学习笔记 不满你找我 可以直接复制doc的内容 效果一样 支持搜索
比较详细:如 1.1 –d 提供调试输出 ...1.5 –m mod 将一个模块以脚本形式运行 1.6 –Q opt 除法选项(参阅文档) 1.7 –c cmd 运行以命令行字符串心事提交的python脚本 1.8 file 以给定的文件运行python脚本