拓冰建站拓冰建站
首页 / 资讯中心 / 正文

DirectX 9.0 SDK 绿色免安装包制作与 Visual Studio 配置指南

简介DirectX 9.0 SDK 免安装版是面向Windows平台游戏与多媒体开发者的实用工具包解决了旧项目或老系统环境下获取DX9开发资源的繁琐问题。该资源免去完整安装流程解压即可获得Include头文件、Lib链接库及示例代码等核心内容方便在Visual Studio中直接配置引用适合需要维护DX9老项目或学习经典图形编程的开发者。压缩包大小仅5.28MB轻量便携便于快速部署到开发环境。资源覆盖Direct3D、DirectDraw、DirectSound等组件对应的API文档、头文件和库文件并附有示例程序与调试工具可帮助读者理解顶点着色器、纹理映射等基础图形概念。目前已有1107人学习对于想低成本接触DirectX 9.0 API的初学者或需要临时使用SDK的工程师而言是一个便捷可靠的选择。 最近又有人抱着老项目找我一打开就是满屏的“无法打开包括文件 d3d9.h”然后顺手去网上找“DirectX 9.0 SDK 免安装板”解压下来一堆不明来历的批处理和缺失的dll越折腾越乱。DirectX 9.0 SDK最后一份是 June 2010 版官方安装程序又老又重装在 Win10/Win11 上各种别扭还不会自动挂钩新版本 Visual Studio。真正适合老游戏、老引擎开发的做法是自己做一份干净的“绿色免安装包”把头文件、库文件、运行库一次性备齐用属性表注入 VS解压即用。这篇文章就围绕这个方案展开为什么需要它、一份能用的包里放什么、怎么自己制作、怎么配置编译环境、以及老项目部署分发时会踩哪些坑。1. 为什么老项目离不开一份 DX9 SDK 免安装版1.1 SDK、运行时、修复工具到底分别管什么很多人一提到 DirectX 就混着讲实际上三个东西完全不是一个层面。DirectX SDK 是开发包里面主要是头文件.h、导入库.lib、工具链、示例代码和文档。你做游戏、做渲染引擎或者维护十年前的 D3D9 代码需要的是这一套。DirectX End-User Runtime 是最终用户运行库普通玩家玩游戏时缺的 d3dx9_43.dll、xinput1_3.dll 这类 DLL 就归它管。Win10/Win11 即使“干净系统”也默认带 d3d9.dll但 D3DX 辅助库 DLL 基本没有所以老游戏经常弹“缺少 d3dx9_43.dll”。而第三方的“DirectX 修复工具”本质上是检测你缺哪些运行库文件然后帮你从缓存或内置包里补上同时顺带检查 VC 运行库。它解决的是运行时问题不能替代 SDK。1.2 官方完整版 SDK 的三重尴尬先说结论官方安装版不是不能用是体验太差。第一安装包体积大安装过程其实是在解压一个包含文档、示例、工具的仓库耗时又闹心。第二安装程序会让管理员权限、UAC、旧版 InstallShield 组件一起上阵在 Win10 上经常卡在某一步然后回滚。第三装完以后 Visual Studio 2017 以后的版本并不会自动帮你包含它的 Include 和 Lib 目录你还是得手动配。既然最终都要手动配为什么不直接用一个解压出来的目录。还有一点容易被忽略官方 SDK June 2010 里有些头文件会和现代 Windows SDK 的 C 标准库定义起冲突尤其是 D3DX9 相关部分。单独维护一份“老 SDK 目录”反而方便隔离不用把整个系统环境搞乱。1.3 免安装版真正适合谁我做了这么多次目标场景就三类。第一种是维护老游戏、老引擎的开发者代码里写死了 d3d9.h 和 d3dx9.h需要在现代编译器上把项目编出来。第二种是 CI 构建服务器没有图形界面、不想跑巨型安装程序直接拉一份绿色目录最省事。第三种是给学生、同事分发学习环境解压一个压缩包就能跑不用污染他们的机器。所以“免安装版”并不是什么黑科技就是把官方 SDK 里的文件按需提取、组织成固定目录再配一个属性表和环境变量来告诉编译器“文件在哪”。下面说一下目录到底怎么组织。2. 一份能用的 DX9 SDK 免安装包里到底该放什么2.1 核心四件套Include、Lib、Redist、辅助工具我推荐的目录结构是这样DX9SDK/ Include/ Lib/ x86/ x64/ Redist/ Bin/Include 目录放头文件老项目基本离不开 d3d9.h、d3dx9.h、d3dx9math.h、d3dx9core.h、d3dx9effect.h。如果项目还用到 DirectInput、XInput、DirectSound那 dinput.h、xinput.h、dsound.h 也要一起放。最稳妥的做法是保留整个官方 Include 目录反正体积不大。Lib 目录很重要建议按 x86/x64 分两个子目录不要混在一起。多数时候只需要 d3d9.lib、d3dx9.lib、dxguid.lib但老代码可能还链接 dinput8.lib、xinput.lib、dsound.lib。官方安装完会有 x86 和 x64 两组全放进去也没问题。Redist 目录放 D3DX 运行库 DLL。不同时期程序依赖不同版本常见的是 d3dx9_43.dll也有用旧的 24 到 42 版本。实际用时建议把可能要用的都备一份但注意 DLL 同样有 x86/x64 之分。Bin 目录可选放一些免安装小工具比如 DxDiag 相关的辅助程序。不是编译必需品一般我懒得放。2.2 x86/x64 目录必须一开始就分清这是所有免安装版最容易出问题的地方比头文件缺失更坑。32 位程序链接时要找 x86 的 lib运行时需要 32 位的 d3dx9_43.dll64 位程序则要 x64 的 lib 和 64 位 DLL。很多网上流传的“免安装DirectX打包”把 x86 文件一股脑塞进去64 位项目编译时链接器告诉你“无法打开 d3dx9.lib”其实是 lib 目录找到了但里面只有 32 位的。制作目录时务必保证Include 不区分平台共用一份。Lib 下 x86 和 x64 分开。Redist 下的 DLL 也分 x86/x64 子目录。将来配 VS 时根据项目平台指向不同目录。2.3 可选项和没必要带的东西官方 SDK 体积大的主要原因是示例代码、文档和调试工具这些对“免安装版”完全无用。Utilities 下的 DirectX Error Lookup 工具可以留下来调试 HRESULT 非常方便但完整文档几十 MB 不加也罢。Debug 版的 d3dx9d.dll 不带进免安装包。它是给开发调试用的发布环境不需要往系统里放反而容易导致版本判断混乱。还有一点要说明不要把 D3D 相关 DLL 直接往 C:\Windows\System32 里塞。绿色软件的思路就是把运行库 DLL 放在应用目录或者用官方运行库安装一次这样既干净又能减少 0xc000007b 这类玄学错误。3. 从零手工制作 DX9 SDK 免安装版3.1 别去下来路不明的整合包素材用官方源我理解大家嫌官方自解压麻烦但网上很多“DX9 SDK 免安装板”压缩包要么文件不全要么捆绑了奇怪的东西。正确做法是拿到官方 Microsoft DirectX SDK (June 2010) 的安装包或 ISO然后用 7-Zip 之类的工具解压或者直接在一台老机器上安装一次把安装目录整体复制出来。官方安装目录一般是C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)拿到官方文件以后按规划好的目录结构复制即可。这里给一组 Windows 命令参考mkdir D:\DX9SDK\Include mkdir D:\DX9SDK\Lib\x86 mkdir D:\DX9SDK\Lib\x64 mkdir D:\DX9SDK\Redist\x86 mkdir D:\DX9SDK\Redist\x64 xcopy C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include\* D:\DX9SDK\Include\ /E /I /Y xcopy C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib\x86\* D:\DX9SDK\Lib\x86\ /E /I /Y xcopy C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib\x64\* D:\DX9SDK\Lib\x64\ /E /I /Y别嫌这一步原始越原始越可控。3.2 用属性表把路径注入 Visual Studio纯手工在每一个 VS 工程里改“VC 目录”当然可以但换台机器、换个人、换版本就废了。我建议做一个 DX9Sdk.props 属性文件用相对路径指向 SDK 目录放到项目仓库里统一维护。下面是一个可用的 props 示例假设把 DX9SDK 放在解决方案目录下的 ThirdParty\DX9SDK?xml version1.0 encodingutf-8? Project ToolsVersion4.0 xmlnshttp://schemas.microsoft.com/developer/msbuild/2003 PropertyGroup Dx9SdkDir Condition$(Dx9SdkDir) $(SolutionDir)ThirdParty\DX9SDK\/Dx9SdkDir /PropertyGroup ItemDefinitionGroup ClCompile AdditionalIncludeDirectories$(Dx9SdkDir)Include;%(AdditionalIncludeDirectories)/AdditionalIncludeDirectories /ClCompile Link AdditionalLibraryDirectories Condition$(Platform) Win32$(Dx9SdkDir)Lib\x86;%(AdditionalLibraryDirectories)/AdditionalLibraryDirectories AdditionalLibraryDirectories Condition$(Platform) x64$(Dx9SdkDir)Lib\x64;%(AdditionalLibraryDirectories)/AdditionalLibraryDirectories /Link /ItemDefinitionGroup /Project这段配置干了三件事定义 SDK 根目录变量、给 C/C 编译器增加 Include 路径、给链接器按平台增加 Lib 路径。属性表和手工改目录最大的区别是它跟随 .vcxproj 一起提交团队成员只要导入一次就不用再折腾。3.3 老项目习惯用 DXSDK_DIR 环境变量怎么办老 SDK 安装器安装时常会设置一个全局环境变量 DXSDK_DIR很多老工程文件里就直接写 $(DXSDK_DIR)。这类项目你用 props 反而不一定好使因为你没法要求所有人改了工程文件以后再把环境变量加上。我的做法是做一个 setpath.batsetx DXSDK_DIR D:\DX9SDK执行完重开 Visual Studio老工程里的 $(DXSDK_DIR) 就能解析了。缺点是对 x64 项目老工程里如果写死了 $(DXSDK_DIR)Lib并不会自动去 Lib\x64所以还是建议逐步迁移到 props 方案。3.4 制作完先跑一遍自检脚本文件复制完别急着用先确认关键文件都在。很多人以为文件拷齐了实际一编译就缺头文件。可以用命令行快速探测if exist D:\DX9SDK\Include\d3d9.h (echo [OK] d3d9.h) else (echo [ERR] d3d9.h) if exist D:\DX9SDK\Include\d3dx9.h (echo [OK] d3dx9.h) else (echo [ERR] d3dx9.h) if exist D:\DX9SDK\Lib\x86\d3d9.lib (echo [OK] x86 d3d9.lib) else (echo [ERR] x86 d3d9.lib) if exist D:\DX9SDK\Lib\x64\d3d9.lib (echo [OK] x64 d3d9.lib) else (echo [ERR] x64 d3d9.lib)我见过有人把 x64 的 lib 目录拷成空目录自检脚本一跑马上暴露。这一步省不得。4. 在 Visual Studio 里把老项目跑起来的完整配置过程4.1 先认识三大高频报错配置 DX9 老项目前先对一下症状。C1083 找不到 d3d9.h 或 d3dx9.h基本就是 Include 路径没生效。LNK1104 无法打开 d3dx9.lib是 Lib 路径不对或者平台目录写错。MSB8036 找不到 Windows SDK 版本这个其实和 DX 关系不大是系统里没装工程指定的 Windows SDK 版本需要安装对应组件或者把工程的 TargetPlatformVersion 改成已安装的版本。还有一类提示是“The following SDK component was not installed”这是 Visual Studio Installer 里的组件安装问题别混淆。4.2 属性表导入的完整步骤在 VS 里按以下步骤操作把做好的 DX9SDK 目录放到解决方案根目录下的 ThirdParty\DX9SDK。把 DX9Sdk.props 放到 ThirdParty 目录。打开“视图”-“属性管理器”不要直接双击工程而是展开到某个配置节点。右键“Debug | Win32”或“Release | x64”这类节点选择“添加现有属性表”选中 DX9Sdk.props。对所有需要用 DX9 的配置重复导入。导入后编译一次正常情况下 d3d9.h、d3dx9.lib 都能找到。如果工程还报了“无法解析的外部符号”再回去检查链接器输入里是否加了对应 lib。4.3 链接器附加依赖怎么加老项目常见的链接依赖组合是d3d9.libDirect3D 9 核心导入库必须。d3dx9.libD3DX9 辅助库编译时链接运行时需要 d3dx9_43.dll。dxguid.lib生成 GUID 常量时常用。dinput8.lib、xinput.lib、dsound.lib用到手柄、键盘、声音时按需添加。打开工程属性在“链接器”-“输入”-“附加依赖项”里按项目需求填。如果项目里用了 #pragma comment(lib, d3dx9.lib)这一项也可以不填但要保证 Lib 路径已配置。4.4 老代码在现代编译器上的两个兼容细节DX9 的代码拿到 VS2019/2022 下编译除了路径问题最多遇到两类代码级问题。第一个是 D3DX9 和 DirectXMath 的头文件冲突。老代码可能同时引用了 d3dx9math.h 和现在 Windows SDK 中的 DirectXMath.h导致宏和类型重定义。我的处理原则是老工程只保留一个数学库路径别同时混用。能迁到 DirectXMath 的尽量迁迁不动就把新头文件路径往后放。第二个是 HRESULT 错误码显示问题。老 SDK 自带的 DXGetErrorString 能输出可读错误信息但如果用新 Windows SDK 编译有时它会指向新版本的错误映射表信息反而变模糊。建议把 DX9SDK\Bin 下的小工具留着出问题先查错误码。5. 部署与分发别让用户屏幕弹“缺少 d3dx9_43.dll”5.1 普通玩家只需要运行库不需要 SDK如果你的项目是给别人玩的千万别把整套 SDK 抛给用户。用户要的只是 d3dx9_43.dll 这类运行库文件不需要头文件和 lib。分发时有三种常见方案。最规范的是让用户运行官方 DirectX End-User Runtime 安装包由它把 D3DX、XInput、DirectSound 等运行库装进系统。第二种是免安装做法把程序依赖的若干个 DLL 直接放到 exe 同目录Windows 搜索 DLL 时优先找应用程序目录这种方式对绿色软件最友好。第三种是针对 x86/x64 分别拷贝到 SysWOW64/System32但我不推荐因为系统目录被污染以后很难排查。5.2 老游戏最常见的四个运行时问题我见过最多的是这四个。一是缺少 d3dx9_43.dll。多数 Win10/Win11 系统没有这个文件解决就是上面说的放运行目录或装运行库。二是 0xc000007b。看到这个错误码优先怀疑 32 位/64 位不匹配。比如 32 位程序里用了 64 位 DLL或者反过来。先用 Dependencies 查看 DLL 架构再调整文件。三是 d3dx9d.dll 找不到。这是 Debug 版 DLL发布包一般是 Release 版不会依赖它。如果出现说明有人把 Debug 程序当正式版发出去重新用 Release 配置编译。四是“DirectX 12 is not supported on your system”之类的新引擎错误。这是现代引擎按 D3D12 路径跑老显卡和 D3D9 老程序不是一回事。老程序走 D3D9 路径的话不要被这种报错带偏也不需要更新 DX9 SDK。5.3 常见问题速查表现象原因解决办法C1083 找不到 d3d9.hInclude 路径未配置导入 props确认 Include 目录存在LNK1104 找不到 d3dx9.libLib 路径或平台不对检查 Lib\x86 或 Lib\x64 路径确认平台对应MSB8036 找不到 Windows SDK系统未安装工程指定的 Windows SDK安装对应 SDK 或修改 TargetPlatformVersion运行提示缺少 d3dx9_43.dll系统没有 D3DX9 运行库装官方运行库或把 DLL 放 exe 目录0xc000007b 应用无法启动DLL 架构不匹配 / VC 运行库缺失用 Dependencies 检查架构补齐 VC 运行库编译时宏或类型重定义D3DX9 与 DirectXMath 头文件冲突只保留一个数学库头文件路径链接时符号无法解析附加依赖项缺少 lib补 d3d9.lib、d3dx9.lib 等5.4 第三方修复工具到底能不能用可以用但要有前提。如果你只是为了快速解决玩家机器上缺 DLL 的问题用知名可靠的 DirectX 修复工具确实省时间它会扫描系统里缺失的 D3DX、XInput、VC 运行库一键补齐。但不要去那种下载站随便找个“增强版”。我的建议是工具只用来临场救援项目分发策略里还是应该写清楚用户需要装运行库或者直接把 DLL 和应用打包在一起。免安装的核心价值就是环境可控不要让第三方的“一键修复”替你决定系统里放什么东西。做过几次老项目维护以后我的习惯是每个仓库里固定放一个 ThirdParty\DX9SDK 目录props 文件指向相对路径。任何人拉下来代码不用装任何 SDK、不用设环境变量只要用 VS 打开工程导入属性表就能编译。运行分发又是另一条链路用户机器上缺哪个 DLL 就补哪个尽量避免让用户自己做系统级别的配置。如果这篇文章能帮你少走一次弯路那我整理的这一套“官方源文件 固定目录 props 注入”的路子就算没白分享。下次再见到“DX9 SDK 免安装板”这种标题别再下那些来路不明的压缩包了自己十分钟做一份一劳永逸。本文还有配套的精品资源点击获取
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门