direct3dcreate9调用失败怎么办?这几个常见错误帮你排查!

吉云

得,今天就来唠唠捣鼓 Direct3DCreate9 这玩意儿的经历。

话说回来,这东西现在用得确实少,毕竟后面都出到12。不过有时候维护老项目,或者想在一些老爷机上跑点东西,还得把它请出来。我最近就是碰上这么个情况,得弄一个兼容性好点的小玩意儿。

第一步,准备工作。

direct3dcreate9调用失败怎么办?这几个常见错误帮你排查!

这没啥好说的,就是把开发环境搭起来。我用的是 Visual Studio,老搭档。先把 DirectX SDK 的路径给配置主要是头文件和库文件的路径。你要是没装 SDK,那得先去下一个装上,不然头文件都找不到,抓瞎。

然后,包含头文件和链接库。

代码里开头就得写上 #include <d3d9.h>。光有头文件还不行,得告诉编译器去哪找具体的实现代码。所以项目设置里面,链接器那块儿,得加上 。有时候还会用到 D3DX 库,那还得加上 之类的,看你具体用啥。

关键的一步:调用 `Direct3DCreate9`。

这一步最简单,代码就一行:

pD3D = Direct3DCreate9(D3D_SDK_VERSION);

direct3dcreate9调用失败怎么办?这几个常见错误帮你排查!

这里的 pD3D 是我定义的一个指针,用来接收返回的对象。关键是那个参数 D3D_SDK_VERSION。这玩意儿的作用就是确保你编译代码用的头文件版本和你系统里装的 DirectX 运行时是匹配的,或者说至少是兼容的。你要是瞎传个别的数字进去,多半就直接给你返回个空指针,告诉你:“哥们儿,版本不对,玩不。”

检查返回值!

调用完,千万别忘检查 pD3D 是不是 NULL。写代码最怕想老手也会犯这种低级错误。

if (pD3D == NULL) { / 处理错误,比如弹个窗告诉用户完犊子 / }

要是返回 NULL ,那问题就多去。可能是 DirectX 没装对,可能是显卡驱动有问题,也可能是显卡太老掉牙,根本不支持 D3D9。我之前就碰到过,在一台虚拟机里跑,死活创建不成功,折腾半天发现是虚拟机显卡驱动模式的问题,没开 3D 加速。

还有一次,代码在自己机器上跑得好好的,拿到朋友的旧电脑上就不行,也是卡在这。查半天,发现他那个显卡驱动是系统自带的通用驱动,压根没装官方驱动,Direct3D 支持不完整。更新驱动就好。别小看驱动这玩意儿。

direct3dcreate9调用失败怎么办?这几个常见错误帮你排查!

拿到指针之后干

如果 pD3D 不是 NULL,那就说明第一步成功!接下来就可以用这个 pD3D 指针去干更多的事,比如:

  • 获取显卡信息
  • 检查设备能力
  • 创建 Direct3D 设备(CreateDevice),这才是真正用来画图的东西
  • direct3dcreate9调用失败怎么办?这几个常见错误帮你排查!

后面的路还长着,创建设备那一步又是一堆参数,什么窗口模式、分辨率、刷新率、后台缓冲区格式啥的,又是一堆坑。

一点小体会

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]