这里写目录标题
0、背景
大约十多年前,本人出了一套没啥影响力的 Windows 核心编程的视频教程,因为都是理论式的基本API使用式的教程,也没有啥项目实例,所以没啥影响力也没有知名度,也使得很多网友都没搞明白这些玩意到底能干啥。但是这套教程的本意并不是为了教大家仅学会 Windows 核心编程那么简单,也不是指望说这点功能就能攒出什么惊奇的应用,实质是为了将来的游戏引擎封装而做的基础准备,只是没人能领会到这一层。
可惜的是后来一直没有精力将后续的游戏引擎编程部分全部制作完,一晃眼十多年过去了,原初的视频网站也倒闭了。再后来我就一头扎进了 D3D12 的学习和教程编写中,并且都发成了CSDN 博客((DirectX12(D3D12)系列),全当是个人爱好了。
最近在继续思考引擎架构的过程中,突然想起是时候将这套教程示例代码开源供大家参考的时候了,于是我将全套代码加工整理后上传到了 GitHub 上:GamebabyRockSun/GRSWindowsSamples 。虽然这套代码年代久远了,但是其最大的目的是在于涉及到引擎设计的每个模块甚至部分代码细节,也是设计引擎时构思模块功能的基本路径,也可以是设计其它类软件系统的构思过程参考,甚至就当做是一个关于软件基本功能模块的思维导图吧。当然其中还有些部分现在也基本不怎么用了,了解下就行了,只是作为完整性,放出来吧,也是让大家了解下 Windows 核心编程的基本全貌。算是窥见现代操作系统基本功能构成的一套模型吧。
1、简介(Introduction)
除了GUI GDI之外,这里囊括了几乎所有的 Windows 功能的基础示例,这样做,首先是为了方便各位了解关于Windows 的所有基本 API;其次是为了方便各位在设计游戏引擎时对除了 DirectX 之外的功能有一个比较完整的功能参考列表,比如:多线程、多进程、内存管理、线程同步、文件系统、网络、XML等等,虽然这些功能都是 Windows 版的,但是现在几乎所有的操作系统都有这些对应的功能,并且在细节上也都很类似,因此在进行抽象设计时这也是一套不错的参考手册。
2、来源(Source)
这套示例来自本人10多年为视频教程准备的示例,目前视频教程被别人发在了B站:C++起步到MFC实战VC++软件工程师高端培训(服务器端开发方向) 视频教程已经年代久远了,仅供各位有兴趣的可以去看看,不想看的就直接看这里的示例学习即可。
3、代码组织形式(Code organization)
本套代码一共212个示例,被按顺序分成了 29 个部分,并且全部按照双字母排序进行了项目命名,使用VS2022打开后,切换到解决方案资源管理器后就可以看到 29 个部分及相关示例。每个示例都做了最简化处理,仅展示本范围内的一个主题,并且没有引用任何第三方库或类,所有的示例几乎都是 C风格的代码,方便各位学习和掌握。代码大部分都参考了 MSDN 本身的示例,但是做了相应的修改和简化,为了使更好的掌握这些基本功能。
另外这套代码的顺序是刻意安排的,也是一般游戏引擎或别的库封装时需要考虑的模块设计问题的属性,即从内存管理这个最基本的模块开始,再考虑需要支持的字符集、然后才是多进程、多线程、线程同步、文件管理等等模块,所以在引擎设计时也是非常不错的参考。
当然所有200多个项目堆在一起,VS2022已经不堪重负了,运行经常会卡壳,所以需要编译调试运行的网友,建议单独复制每章的代码独立做成轻量的解决方案,或者自行改成 CMake 形式也行。
4、重要提示(Important note)
本套代码中有些示例代码有潜在风险,比如:DLL 注入示例、跨进程内存分配查询、磁盘扇区读写、LSP(Winsock服务提供者接口 SPI)示例、系统未公开API调用、Windows 权限提升、注册表操作等示例,运行后可能会引起系统故障,所以请各位务必在搞懂示例原理的基础上再去试运行,有条件的请在虚拟机中学习编译调试这些示例,以免引起不必要的麻烦。
另外示例中有些内容需要有对应的硬件环境才能运行,比如:COM端口读写示例、磁带的读写等。所以没有这些硬件条件的情况下是没法运行的,请不要误解为示例有问题。
本人对各位因贸然编译运行这些示例而引起的系统损坏或其它损失概不负责。
5、未来计划(Future plan)
这套示例代码将不定期的进行更新,将来可能更新的重点范围在:多线程、内存管理、文件管理、同步对象、网络等比较基础重要的部分。其它的部分因为有些已经太古老或者是有更好的替代库就不再更新了,保留仅供各位参考用。
另外因为这套代码年代久远,目前全部都是Win32 32配置形式,没有配置x64的编译配置,并且部分示例可能在VS2022下编译会出现问题,这些问题都将在未来逐步修正,因为有些示例在x64环境下需要做些修改。现在仅是上传提交初始化。
未来在展示关于游戏引擎封装的模块、思路和方法的时候,这套示例都将是最重要的参考部分之一,所以有兴趣的网友请务必仔细看下重点的部分,以免在看我后续的教程的时候,有什么知识空白。
6、协议(LICENSE)
因为这套示例库,基本没有什么封装,仅仅是为了展示 Windows API的基本调用方法和功能的,所以也不具备直接使用的价值,只有学习参考备忘的价值。最终使用 MIT 协议公开。