
Windows编程
文章平均质量分 92
GamebabyRockSun_QQ
曾经拥有的,不要忘记,
已经得到的,更要珍惜,
属于自己的,不要放弃,
已经失去的,留着回忆,
想要得到的,必须努力,
但最重要的,是好好爱惜自己!
展开
-
开放本人早年的Windows核心编程的代码库——供引擎设计参考
除了GUI GDI之外,这里囊括了几乎所有的 Windows 功能的基础示例,这样做,首先是为了方便各位了解关于Windows 的所有基本 API;其次是为了方便各位在设计游戏引擎时对除了 DirectX 之外的功能有一个比较完整的功能参考列表,比如:多线程、多进程、内存管理、线程同步、文件系统、网络、XML等等,虽然这些功能都是 Windows 版的,但是现在几乎所有的操作系统都有这些对应的功能,并且在细节上也都很类似,因此在进行抽象设计时这也是一套不错的参考手册。原创 2022-11-08 19:23:32 · 1064 阅读 · 2 评论 -
DirectX12(D3D12)基础教程(外篇四)——用Assimp载入模型基础操作(无渲染纯命令行版)
目录1、前言2、Assimp使用简介3、Assimp头文件和库文件引入4、Import模型文件5、aiScene基本数据结构及遍历5.1、Assimp类图及关系5.2、aiScene遍历5.3、网格数据(aiMesh)5.4、材质数据(aiMaterial)5.5、骨骼结构(aiNode)5.6、动画数据(aiAnimation)5.7、assimp中骨骼动画数据的总结5.8、assimp中的纹理6、命令行操作方法说明7、关于引用ATL的说明1、前言 在《外篇一》教程中,已经交代了为什么使用Assim原创 2021-06-17 19:37:04 · 3878 阅读 · 40 评论 -
VC++ 实战OLEDB编程(五)
很久没有更新我的博客了,作为系列文章,OLEDB这个专题的前几篇文章受到了广大网友的极大关注,让我有点受宠若惊了,本想早点完成这个系列,哪怕是后续的文章,无奈杂务缠身,加之原稿和原始代码的丢失,使我不得不又重头建立这些,当然只要有网友的关注,我就会继续将这个话题讨论下去,直到大家都真正的掌握OLEDB这个数据库编程接口,哪怕仅仅是点击率的上涨,对我都是莫大的安慰。前面的系列文章只是使用OLED...原创 2017-10-10 14:18:04 · 510 阅读 · 0 评论 -
VC++ 实战OLEDB编程(六)
前面的系列文章中,我们主要讨论的是如何“获得”或者“读取”数据,关键的步骤就是如何执行一个SQL语句,并读取语句的结果集,包括读取BLOB型数据。对于一般的任务来说,这些基本的操作已经足够了,因为只要可以执行SQL语句,那么大多数数据库任务就可以很好的完成了,而我们要做的就是以静态或动态的方式拼出SQL语句即可。看起来这很完美,事实上也是这样,在一些应用中,这确实足够了,但是对于一些高级的任务...原创 2017-10-10 14:18:07 · 568 阅读 · 0 评论 -
VC++ 实战OLEDB编程(七)一个完整的例子
为了方便大家总结和学习前面的章节内容,此处给出一个完整的OLEDB的例子,作为前面所有内容的一个总结,使用VS2008新建一个空的Win32项目,然后新建一个cpp文件,将所有代码都复制粘贴进去,然后编译执行即可,因为这个例子没有什么输出,所以建议使用调试方式一步步执行看程序的执行逻辑,代码中注释的部分并不表示没有用处,而是一些功能性的代码,有些事开关,有些是特殊功能,可以自己选择性...原创 2017-10-10 14:18:10 · 1174 阅读 · 3 评论 -
VC++实战OLEDB编程(八)——行状态与延迟更新
在之前的七篇文章中,我们连续的掌握了从连接数据库到取出数据,再到修改数据的整个过程,同时也看到了一个相对较完整的例子,如果认真阅读并实践前面系列文章的话,那么作为OLEDB编程入门的内容算是都掌握了,当然所有已掌握的内容都是将要学习的新内容的基础,因此之后的文章都要求对前面的内容有熟练的掌握和深刻的理解。OK,下面我们开始新内容的学习。在第六篇文章中,我们介绍了如何修改、新增、删除记录的方法,...原创 2017-10-10 14:18:13 · 591 阅读 · 0 评论 -
VC++实战OLEDB编程(九)
在前面的系列文章中,关于OLEDB的大概面貌算是介绍清楚了,很多网友也已经开始了伟大的OLEDB编程实践,这也让我很欣慰。但欣慰之余,我认真的审视了前面的内容,结果发现还是遗漏了很多很多非常非常有用的细节,比如我们常用的数据类型转换,这个专题就几乎没有讨论过,以至于很多网友在OLEDB编程应用中还是只能裹足不前,这也成了一个非常严重的障碍,那么这次我就集中精力先把这个障碍扫清吧。一般的,我们应...原创 2017-10-10 14:18:16 · 644 阅读 · 0 评论 -
VC++实战OLEDB编程(十)——关于延迟提交新增行问题的澄清
在“实战OLEDB编程”系列文章中,后面的几篇文章中讨论了一下关于延迟提交的问题,有网友回复说新插入的行无法延迟提交,并说是微软的一个bug,本着怀疑一切和刨根问底的精神,我对这个问题进行了深入的实验和研究,结果发现,这种说法很是不负责任的。现在可以肯定的说新插入行的延迟提交是完全没有任何问题的。至于为什么有网友说不能延迟提交呢?我也分析了一下原因,结果发现,有个关键原因导致新插入行的延...原创 2017-10-10 14:18:22 · 342 阅读 · 0 评论 -
VC++实战OLEDB编程(十一)——参数化查询和存储过程调用
在一些面向业务的应用程序中,很多业务的查询往往是固定的,其中有些甚至只是根据不同的值改变几个固定的条件值而已。比如查询用户信息,通常都是根据用户编号或者用户名称等固定信息查询用户表得到一个结果集。比如查询语句:Select * From 用户表 Where 用户号=’xxxx’。往往在一些程序中,这个语句都是先被组成字符串,然后被执行。之前文章中的例子也是这样做的,最终的SQL语句都是一个字...原创 2017-10-10 14:18:24 · 782 阅读 · 0 评论 -
D3D11设备接口的动态创建方法
在微软的例子中,提供了一种动态创建ID3D11Device接口指针的方法,发在这里,供大家参考.该方法的优势就是可以方便的判定系统中是否支持D3D11,并且针对可能的情况,通过MessageBox的方法,给出了可能的解决方案:HRESULT WINAPI Dynamic_D3D11CreateDevice( IDXGIAdapter* pAdapter, ...原创 2017-10-10 14:21:03 · 2089 阅读 · 0 评论 -
游戏引擎开发系列——消息循环篇
写了很多关于IOCP和OLEDB的文章,今天换个话题,不然很多网友都以为俺就是一服务端程序,其实我真正的身份是——程序员,什么都写的程序员,呵呵呵。这回讨论的话题主要集中到游戏引擎上来,目前国内游戏行业比较火爆,但是基础性的研究、技术资料都比较少,本人撰写这个系列,权当为产业尽绵薄之力。或者当做引玉之砖吧。关于什么是游戏引擎,现在还是没有一个统一的定论,但是大体的功能结构已经有些比较规范的...原创 2017-10-10 14:18:34 · 3099 阅读 · 17 评论 -
DirectX12(D3D12)基础教程(三)——使用独立堆以“定位方式”创建资源、创建动态采样器、初步理解采取器类型
目录 1、前言2、显卡架构和存储管理3、创建默认堆并在其上以“定位方式”创建2D纹理4、动态采样器5、完整代码1、前言经过了第二部分教程的“折腾”之后,后面的教程我觉得应该顺畅多了。至少我现在可以一天时间就把教程示例代码调通,并且可以按照自己的想法自由的去发挥了。我很喜欢这种感觉,就像在打游戏中虐那些无脑的机器AI角色一样。经过前面两章的学习,我相信大家对D3D...原创 2018-10-27 17:21:15 · 9314 阅读 · 23 评论 -
DirectX12(D3D12)基础教程(五)——理解和使用捆绑包,加载并使用DDS Cube Map
目录 1、前言2、加载DDS3、捆绑包(Bundles)4、完整代码1、前言这一次距上一篇教程又隔了有一段时间了,如果你看了之前的教程的话,马上就会想到悲催的我是不是又遇到了什么麻烦?应该说你能这样想那么恭喜你,你猜对了,这次搞得我人仰马翻的是DDS纹理。其实在我之前的教程中乐观的估计了WIC库,其实这个库根本就不能用来加载DDS型的纹理。当然教程到这里,我已经被纹理问...原创 2018-11-19 22:48:44 · 9675 阅读 · 7 评论 -
DirectX12(D3D12)基础教程(六)——多线程渲染
目录 1、前言2、为什么要多线程渲染3、多线程3.1、什么是线程3.2、进程的主线程3.3、线程的入口函数3.4、创建线程3.5、CreateThread示例3.6、C/C++创建线程函数(VC版)3.7、_beginthreadex示例3.8、线程退出3.9、线程的暂停(挂起)和恢复3.10、线程的暂停式创建3.11、线程栈3...原创 2019-01-14 21:39:37 · 14516 阅读 · 31 评论 -
DirectX12(D3D12)基础教程(九)——多线程渲染BUG修正及MsgWaitForMultipleObjects函数详解
1、前言距离该系列文章上一篇文章已经有近半年多时间了,大家一定很好奇,为什么不继续下去了呢?说好的光追渲染去哪了呢?OK,请大家稍安勿躁,首先,光追渲染的示例正在紧张的编写当中,教程也在有条不紊的准备中,只是因为光追渲染目前在我的电脑上只能以Fallback形式运行,而征服Fallback库有点麻烦,需要些时间;其次,在这近半年多的时间里,除了忙于工作,我主要是在按计划学习Docker、G...原创 2019-09-11 23:35:23 · 1581 阅读 · 8 评论 -
VC++ 实战OLEDB编程(四)
在开始新的结果集对象(Rowset)之旅之前,我们再来补充一个关于Command对象的用法,在有些情况下,我们执行的SQL语句只是一个Update、Insert或Delete等操作,有些时候我们可能直接执行就是一个存储过程而已,存储过程可能产生也可能不产生一个结果集,这类没有结果集的SQL语句,我们可以像下面这样来执行:pICommandText->Execute(NULL,IID_N...原创 2017-10-10 14:18:01 · 859 阅读 · 4 评论 -
VC++ 实战OLEDB编程(三)
接下来我们详细的讨论有关命令(Command)对象的各个接口。通过前面的两篇文章,大家应该已经知道一些基础知识:属性集合,属性,对象,接口,如何打开连接,如何创建事务等等,有了这些基础的概念性的知识,对于理解和应用好OLEDB编程接口是非常重要的,对于访问数据源数据的任务来说前面仅仅是开始。对于一个像数据库这类的数据源,操作它最好的方法就是使用SQL语句,在OLEDB中对执行SQL语句提供了完整的...原创 2017-10-10 14:17:58 · 659 阅读 · 2 评论 -
VC++ 实战OLEDB编程(二)
上回书说到(哎哟!谁扔的臭鸡蛋?不好意思忘了我是搞IT的不是说书的了。)在前面我们已经介绍了如何创建一个连接对象(记住叫IDBInitialize,而不是别的什么东西),接下来我们就需要用这个连接对象来创建一个叫做事务的对象了,搞数据库的都知道什么叫事务我就不多说了,这个地方只是强调下一个连接对象可以创建多个事务对象,这一点大家要记清楚,在ATL的OLEDB封装中将连接对象和事务对象被一对一的封装...原创 2017-10-10 14:17:55 · 584 阅读 · 0 评论 -
用Windows API编写一个精确定时的循环
这几天跟网友讨论一个程序优化问题时,遇到一个需要延时的循环,结合我所知道的知识,并突发灵感,想到了用Windows系统提供的定时器API写一个精确延时循环的方法。问题原本是这个样子的,就是说,在一个循环中执行一些操作后,需要用Sleep这个函数,延迟一定时间后,在执行下一轮循环,伪代码如下:for(int i = 0; i < MaxCount;i++){ dos...原创 2017-10-10 14:18:49 · 1526 阅读 · 0 评论 -
让Windows 7 32位版支持大于4GB的内存
一个偶然的机会,我的电脑系统崩溃了,之前的Vista彻底不能用了,因为安装SP2补丁,彻底挂掉了.和平常一样,俺借来安装光盘准备先装个XP系统,然后再用硬盘安装工具装个Windows 7。听说Windows 7效果不错,比该死的Vista好用多了,喜欢尝鲜的我当然挡不住这个诱惑了。因为偶木有Windows 7的安装光盘。 突然悲剧的情况发生了,安装盘启动到一半居然蓝屏了,老中医遇到新问题啊,郁闷原创 2017-10-10 14:19:31 · 1326 阅读 · 0 评论 -
VC++窗口应用程序中使用控制台输出
用了n多年的OutputDebugString作为调试输出信息的方法,很顺手,在VS2008中用起来也依然顺手,VS2010亦然.马上2012了,我想如果真的有末日,就在末日来临之前,让我尝试下与以往不同的方法,不要让生命留下什么遗憾.所以我就想能不能使用一个控制台窗口来作为辅助的调试信息输出窗口,甚至可以用它来接收一些控制命令,从而更灵活的控制程序的调试呢?于是又一个大胆的尝试历程开始了,和...原创 2017-10-10 14:19:47 · 4241 阅读 · 0 评论 -
Win10环境下,拦截WM_NCCREATE消息时的一个诡异BUG
Win10环境下,拦截WM_NCCREATE消息时的一个 诡异BUG这几天在编写一个测试渲染管线的程序时,我直接使用了一段大约在10年前封装的一段窗口代码:LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {//窗口过程; LRESULT lRet = 0;原创 2017-11-09 20:56:52 · 790 阅读 · 0 评论 -
Windows2008新IOCP线程池学习笔记
今天兴冲冲开始琢磨Windows2008新线程池中的IOCP部分新增的API的调用,也就是新的完成端口的调用方式,新的API如下:CancelThreadpoolIoCloseThreadpoolIoCreateThreadpoolIoStartThreadpoolIoWaitForThreadpoolIoCallbacks这几个函数其实从名字并不难理解其调用方...原创 2017-10-10 14:19:53 · 665 阅读 · 1 评论 -
VS2017编译WRL的Callback模版函数兼容性问题及解决方法
近来一直在研究DXR的示例代码,并在其中看到例子中大量的使用了WRL的新模版类代替ATL的老三样的模版类,使用最多的就是COM智能指针Microsoft::WRL::ComPtr类。在聚合使用D3D的接口时,更是像下面这样大量应用该模版包装了D3D的接口:......Microsoft::WRL::ComPtr<IDXGIFactory4> m_dx...原创 2018-09-04 08:48:35 · 2765 阅读 · 6 评论 -
关于下载、编译及运行DirectX Raytracing Sample Code (DXR)若干小问题及解决方法
伴随Nvidia公司全新一代RTX20XX系显卡的发布,微软公司也及时的更新了配套的DXR演示代码。下载地址:https://github.com/Microsoft/DirectX-Graphics-Samples/releases在下载页面中主要要下载如图红色箭头所指的几个包: 下载过程中因为Github链接加密的问题,普通的下载工具下载速度慢并且会中断,因此建议使用Githu...原创 2018-09-05 11:36:20 · 3491 阅读 · 7 评论 -
IOCP+WinSock2新函数打造高性能SOCKET池
在前一篇文章《WinSock2编程之打造完整的SOCKET池 》中,介绍了WinSock2的一些新函数,并重点详细介绍了什么是SOCKET池,有了这个概念,现在就接着展开更深入的讨论。首先这里要重点重申一下就是,SOCKET池主要指的是使用面向连接的协议的情况下,最常用的就是需要管理大量的TCP连接的时候。常见的就是Web服务器、FTP服务器等。下面就分步骤的详细介绍如何最终实现SO...原创 2017-10-10 14:18:31 · 617 阅读 · 2 评论 -
IOCP编程之基本原理
在我的博客之前写了很多关于IOCP的“行云流水”似的看了让人发狂的文章,尤其是几篇关于IOCP加线程池文章,更是让一些功力不够深厚的初学IOCP者,有种吐血的感觉。为了让大家能够立刻提升内力修为,并且迅速的掌握IOCP这个Windows平台上的乾坤大挪移心法,这次我决定给大家好好补补这个基础。要想彻底征服IOCP,并应用好IOCP这个模型,首先就让我们穿越到遥远的计算机青铜器时代(以出现PC为...原创 2017-10-10 14:18:40 · 586 阅读 · 0 评论 -
IOCP编程之重叠IO
其实这个标题有点“标题党”的味道,为了大家搜索方便我故意冠以IOCP编程之名,其实重叠IO编程并不一定需要IOCP,而IOCP编程就一定需要重叠IO。是不是已经被这句话给绕晕了?总之是为了更好的应用IOCP,所以要理解重叠IO。这篇文章的核心就是讨论重叠IO的来龙去脉。在很久很久以前,在用C语言写DOS程序的年代,就有了很完整的IO标准库支撑,printf输出字符到屏幕,fopen,fwrit...原创 2017-10-10 14:19:23 · 592 阅读 · 0 评论 -
WinSock TCP keepalive的机理及使用(自动心跳包的发送)
TCP是面向连接的,在实际应用中通常都需要检测对端是否还处于连接中。如果已断开连接,主要分为以下几种情况: 1. 连接的对端正常关闭,即使用closesocket关闭连接。2. 连接的对端非正常关闭,包括对端异常关闭,网络断开等情况。对于第一种情况,很好判断,但是对于第二种情况,可能会要麻烦一些。在网上找到了一些文章,大致有以下两种解决方法:? 自己编写心跳包程序简单的说也...原创 2017-10-10 14:20:50 · 2914 阅读 · 0 评论 -
【原创】IOCP编程之聚集散播
做为IOCP应用中重要的一个方法就是被称为“聚集-散播”的方法。非常遗憾的是在很多介绍IOCP使用的资料中,我几乎没有见过有专门介绍此方法的文章,因此本文就重点讲述此方法。在使用IOCP操作大量的TCP连接并处理IO请求的时候,一个很让我们头疼的事情就是所谓的“粘包”问题,即当发送方发送的数据包尺寸小于接收方缓冲,同时又连续发送数据的情况下,两个数据包被一起接收,接收端就需要将包重新拆分,如果...原创 2017-10-10 14:23:29 · 517 阅读 · 2 评论 -
VC++ 实战OLEDB编程(一)
很久没有写点新的东西了,最近实在是非常的忙,也没有时间去料理自己的博客,今天总算是休息一下,写点东西,算是给自己交个差吧。这次我准备系统的介绍下OLEDB编程的一些内容。OLEDB作为目前最全面,最强大的Windows平台下的数据库编程接口,其资料在网上却少之又少,这着实有些让人纳罕。现在很多的应用软件系统都要和数据库打交道,没有一个好的强大的数据库编程接口作为支撑,这些系统的功能,性能,...原创 2017-10-10 14:17:52 · 3520 阅读 · 0 评论 -
Windows 2008 Server线程池前瞻(原创)
没有什么能让我如此的着迷和口水直流了,可是我的机器却无法安装Windows 2008 Server,因为俺没钱升级它。所以我所有关于这个Windows 2008 Server的知识都是来自MSDN,在那里,它被叫作Longhorn(长角牛),其实我一直没搞懂这个牛究竟长得啥样子,我估计不好看。因为好看的东西肯定都被人拍成写真集,到处散播了。 在我看Windows从2000 Serv原创 2017-10-10 14:17:01 · 367 阅读 · 0 评论