具体描述
内容简介
本书是微软大学MicrosoftWin32高级培训班的高级参考读物,书中介
绍了进行MicrosoftWin32高级程序设计的有关要点。
本书对从事软件设计、开发和应用的技术人员具有重要的参考价值。
作者简介
目录信息
简介
0.1概述
0.2Facilities(设备)
0.3Microsoft课程
0.4课程材料
0.5你的期望
0.6课程提纲
第一章 移植
1.1概述
1.2Windows3.1编译器概述
1.3Win32编译器概述
1.4Makefile句法
1.5Makefile第一部分:NTWIN32.MAK
1.6Makefile第二部分:编译源程序
1.7Makefile第三部分:编译资源
1.8Makefile第四部分:连接
1.9Headers(头)
1.10移植工具
1.11PORT.INI文件
1.12移植的步骤
1.13WinMain的使用
1.14窗口消息程序
1.15消息参数重装
1.16消息封装的宏命令
1.17可移植消息处理
1.18可移植API函数
1.19为Windows书写可移植C源代码
1.20Pitfalls
1.21MicrosoftWin32软件开发工具(SDK)
1.22演示
1.23复习
1.24实验一:移植
第二章 WindowsNT体系结构概述
2.1概述
2.2WindowsNT的设计目标
2.3连接多重系统
2.4WindowsNT体系结构
2.5NT执行程序
2.6WindowsNT 子系统
2.7进程间通信
2.8抢占式多任务
2.9多处理
2.10虚存管理
2.11WindowsNT 对象
2.12对象模型
2.13对象结构
2.14WindowsNT I/O系统体系结构
2.15分层设备驱动程序
2.16注册
2.17复习
第三章 结构化的异常处理
3.1概述
3.2定义
3.3句法
3.4异常流程图
3.5终止流程图
3.6异常句柄查询体系
3.7句柄特性
3.8异常举例
3.9终止举例
3.10实验二:结构化的异常处理
3.11异常调度
3.12 异常处理及解除
3.13异常筛选程序
3.14异常信息
3.15未经处理的异常筛选程序
3.16收回异常
3.17 非正常终止
3.18复习
3.19实验二:结构化的异常处理
第四章 创建/启动一个进程
4.1概述
4.2进程定义
4.3进程属性
4.4进程资源
4.5进程间通信
4.6管道
4.7进程创建
4.8设置启动窗口消
4.9进程消息
4.10继承
4.11安全属性
4.12进程句柄
4.13控制一个进程
4.14终止一个进程
4.15合适的API函数
4.16读和写句柄
4.17复习
4.18实验三:创建/启动一个进程
第五章 线程和同步
5.1概述
5.2定义
5.3进程的梗概
5.4线程调度
5.5线程抢占
5.6线程优先级
5.7为何使用多线程?
5.8线程额外开销
5.9线程创建API函数
5.10CreateThread举例
5.11CalculationThreadProc举例
5.12线程ID和句柄
5.13线程终止
5.14C运行时间库
5.15实验四:线程和同步
5.16线程同步函数
5.17在对象上等待
5.18事件对象
5.19使用事件对象
5.20排它对象
5.21利用排它对象
5.22信号灯对象
5.23利用信号灯对象
5.24临界区
5.25使用临界区
5.26线程和信息队列:Windows3.1模型
5.27线程和信息队列:Win32模型
5.28API函数
5.29复习
5.30实验四:线程和同步
第六章 标准I/O
6.1概述
6.2I/O系统的组成部分
6.3SCSI分层
6.4内部对象
6.5超高速缓存管理器
6.6同步I/O处理
6.7异步I/O处理
6.8同步的/异步的I/O
6.9异步过程调用(APC)
6.10文件I/O的API
6.11使用事件的异步I/O
6.12使用I/O完成例行程序的异步I/O
6.13标准的输入和输出
6.14复习
6.15实验五:标准I/O
第七章 内存管理
7.1概述
7.2地址空间
7.3虚拟内存
7.4页目录、页表、页帧
7.5分页文件
7.6页面提交
7.7拷贝写和保护文件
7.8API函数:HeapAlloc
7.9API函数:LocalAllocGlobalAlloc
7.10 API函数:C运行时间库
7.11 API函数:VirtualAlloc
7.12 实验六:内存管理
7.13 内存共享
7.14 GMEMDDESHARE
7.15 内存映射文件的视图
7.16 GreateFileMapping和OpenFileMapping
7.17 MapViewOfFile和UnmapViewOfFile
7.18 使用内存映射文件来共享内存
7.19 基指针
7.20 复习
7.21 实验六:内存管理
第八章 动态连接库(DLL)
8.1 概述
8.2 DLL映射
8.3 调用/执行
8.4 实例数据
8.5 线程局部存储
8.6 单一进入和退出点:DllEntryPoint
8.7 DllEntryPoint代码举例
8.8 线程同DLL,的连接与分离
8.9 动态安装
8.10 终止与退出
8.11 C运行时间库
8.12 SS!=DS不再是问题
8.13 编译DLL代码
8.14 连接DLL
8.15 建立共享内存
8.16 DLL模块定义文件
8.17 输入和输出函数
8.18 与3.1的区别:数据在应用程序中的共享
8.19 与3.1的区别:实例数据
8.20 复习
8.21 实验七:动态连接库(DLL)
第九章 远程过程调用(RPC)
9.1 概述
9.2 什么是RPC
9.3 RPC 构件
9.4 RPC如何工作
9.5 传输
9.6 名字服务
9.7 RPC运行时间:函数
9.8 界面定义语言
9.9 MIDL 编译器需要什么
9.10 应用程序配置文件(ACF)
9.11 联编
9.12 联编和联编句柄
9.13 MIDL 编译
9.14 输出文件生成
9.15 建立过程
9.16 熟悉的过程调用模型
9.17 .IDL文件
9.18 .ACF文件
9.19 RPC所需函数
9.20 调用RPC服务器API函数
9.21 调用RPC客户机API函数
9.22 MDIL编译
9.23 演示:RPC代码的指导
9.24 复习
9.25 实验八:远程过程调用(RPC)
第十章 精调基于Win32的应用程序
10.1 概述
10.2 性能工具
10.3 演示
10.4 复习
第十一章 国际化和统一代码
11.1 概述
11.2 什么是统一代码
11.3 编码方案设计
11.4 Win32中的统一代码
11.5 统一代码编程
11.6 数据类型
11.7 函数原型
11.8 基本转换步骤
11.9 Window类
11.10 消息
11.11 C运行时间扩展
11.12 文件名
11.13 字节指令标记
11.14 识别统一代码文件
11.15 复习
11.16 实验九:统一代码
附录A 样例程序清单
附录B 有关论文
将基于Windows的16位的应用程序移植到Win32中
WindowsNT中的虚拟内存管理器
Win32中的DLL
实验手册
概述
实验一 移植到一个32位的平台
练习1将一个16位的应用程序移植到一个32位的平台上
实验二 结构化异常处理
练习1实验结构化异常处理
练习2(可选)使用系统默认异常筛选程序
练习3实现一个样本筛选程序
实验三 启动并创建一个进程
练习1:创建并控制一个进程
实验四 线程和同步
练习1创建一个线程并使它运行
练习2创建并同步多线程
实验五 标准I/O
练习1执行异步文件I/O
实验六 内存管理
练习1用HeapAPI管理内存
练习2通过内存映射文件来共享内存
实验七 DLL
练习1创建一个32位的DLL
实验八 远程过程调用(RPC)
练习1实现一个RPC的应用程序
实验九 国际化和统一代码
练习1把一个应用程序转换成统一代码
· · · · · · (收起)
读后感
用户评价
从作者的叙事风格来看,语言是清晰的,没有太多的晦涩难懂的术语,这对于初学者来说是优势,但对于追求技术深度的读者来说,则显得有些过于平铺直叙。书中的示例代码往往是孤立的,展示了某个特定API的功能,但很少看到这些功能是如何在一个大型、多线程、高并发的应用程序中协同工作的。比如,在涉及多线程编程时,作者提到了创建线程和简单的临界区(Critical Section),这部分内容比较标准。然而,在实际的GUI应用中,我们经常需要处理跨线程的UI更新问题,以及如何优雅地关闭正在运行的线程而不造成资源泄露。关于这些在真实世界项目中经常遇到的棘手问题,这本书没有提供任何实用的解决方案或案例分析。我的期望是能看到一些关于如何使用同步对象(如事件、信号量)来协调复杂异步操作的实战经验分享,而不是仅仅停留在理论定义上。总体而言,这本书更像是给出一个工具箱的清单,告诉你每个工具叫什么名字,能做什么基本操作,但没有教你如何用这些工具去建造一座复杂的、经得起考验的“大厦”。
这本书的封面设计倒是挺吸引人的,深蓝色的主调配上银灰色的字体,给人一种专业、严谨的感觉。我原本是冲着“Win32 高级编程”这几个字去的,想着能学点不一样的底层细节。但是,读下来之后,感觉这本书更像是一本面向新手或初学者的入门手册,内容上涵盖了Win32 API的基本结构、消息循环的原理、以及一些常见的窗口创建和控件操作。比如,它花了大量的篇幅讲解如何使用`CreateWindowEx`函数来创建窗口,并且详细解释了各个参数的含义,这对刚接触Win32编程的人来说确实很有帮助。我记得书里有一个章节专门讲了GDI绘图的基础,演示了如何使用`MoveToEx`和`LineTo`来画直线,步骤讲解得非常细致,几乎是手把手教的。然而,对于我这种已经有一些Windows编程经验的人来说,这些内容就显得有些过于基础了。我期待的“高级”部分,比如复杂的线程同步机制、内存管理的高级技巧,或者是深入解析内核对象的工作原理,在书中几乎找不到。整本书的结构就像是一个教程,每章后面都有一些简单的练习题,但这些练习都停留在API调用的层面,没有涉及到更深层次的架构设计或者性能优化。整体来说,如果你是初学者,想对Win32有一个初步的认识,这本书或许是个不错的起点,但如果你想深入挖掘Win32的“内功心法”,恐怕这本书的内容深度是远远不够的。
这本书的理论深度确实需要商榷。虽然标题里有“高级”二字,但内容更偏向于对MSDN文档的重新梳理和组织,缺乏作者独到的见解和实践中踩过的“坑”的总结。例如,在讲解窗口过程函数(Window Procedure)时,书上着重强调了处理`WM_PAINT`消息的重要性,并给出了一个标准的重绘流程。这固然是基础,但真正高级的程序往往需要处理复杂的绘图优化,比如位图缓存(Off-screen Bitmaps)来避免闪烁,或者如何利用双缓冲技术保证复杂图形绘制的流畅性。这些在书中完全没有提及,仿佛这些“优化技巧”并不存在于Win32的高级世界一样。再者,关于内存模型,书里仅仅提到了栈和堆的基本概念,对于虚拟内存管理、分页机制,以及Win32 API如何与操作系统内核交互来分配和保护内存区域,都只是一笔带过。我希望看到的是关于虚拟内存布局的图示分析,以及如何通过`VirtualAlloc`进行更精细的内存控制,但这本书显然没有提供这方面的洞察力。读完之后,我感觉自己只是学会了如何搭起一个Win32程序的骨架,但如何让这个骨架健壮、高效地运转起来,这本书没有给出太多指导方针。
这本书的知识体系构建上,我感觉它的落脚点似乎更偏向于旧时代的Windows编程范式,对于现代Windows应用开发中越来越重要的异步操作和现代化API支持着墨不多。例如,当讨论到文件I/O时,书中主要聚焦于传统的同步读写函数,比如`ReadFile`和`WriteFile`。虽然它们有效,但在高性能网络服务或需要大量异步文件操作的场景下,基于重叠I/O(Overlapped I/O)的异步模型才是王道。遗憾的是,关于I/O完成端口(IOCP)的介绍,这本书完全没有涉及,这可以说是Win32高级网络编程中一个至关重要的组成部分。同样,在处理用户界面时,尽管提到了自定义控件,但对于现代Windows中广泛应用的DirectX/Direct2D等硬件加速图形技术,书中只是一带而过,没有深入探讨如何将其集成到传统的HWND窗口中实现高性能渲染。这使得这本书的实用性在面对当前对性能和用户体验要求极高的开发环境时,显得有些力不从心。它更像是一份优秀的“Win32 API基础词典”,而非一本指引开发者迈向“高级殿堂”的“进阶秘籍”。
阅读体验上,这本书的排版算是中规中矩,代码示例的字体和颜色区分度尚可,有助于代码的阅读。不过,在内容组织上,我感觉作者似乎有些散乱,很多本该放在一起讲的知识点被分散到了不同的章节中。例如,关于错误处理的部分,虽然提到了`GetLastError()`的使用,但并没有系统地梳理各种常见的错误代码及其背后的原因,导致在实际调试遇到问题时,这本书提供的帮助有限。我特别留意了关于MFC(Microsoft Foundation Classes)与原生Win32 API的对比部分,期待能看到一些关于何时选择原生API、何时使用MFC的权衡分析,但书中仅仅是简单地介绍了两者各自的接口函数,缺乏深度对比和实践指导。印象最深的是关于动态链接库(DLL)的讲解,作者详细介绍了`LoadLibrary`和`GetProcAddress`的使用方法,这部分确实是实操性比较强的知识点。然而,在涉及DLL的导出函数如何安全地在不同进程间通信(IPC)时,内容戛然而止,没有提及管道(Pipes)或共享内存等更高级的进程间通信技术。这让我感觉作者在介绍完“是什么”之后,就停止了对“为什么”和“怎么做得更好”的探索,读起来总觉得意犹未尽,像是只看到了冰山一角,却没能潜入水下探索。