DirectX常见编译错误及解决办法
常见的编译错误及解决办法
1. fatal error LNK1104: cannot open file 'largeint.lib'
直接删除对largeint.lib的引用即可
2. fatal error CVT1100: duplicate resource. type:MANIFEST, name:1, language:0x0409
禁止嵌入清单文件即可
project-properties-configuration properties-manifest tool-embed manifest, select “No”
3. error C2664: 'D3DXLoadSkinMeshFromXof' : cannot convert parameter 1 from 'IDirectXFileData *' to 'LPD3DXFILEDATA'
这是旧版SDK中函数的定义
HRESULT D3DXLoadSkinMeshFromXof(
LPDIRECTXFILEDATA pXofObjMesh,
DWORD Options,
LPDIRECT3DDEVICE9 pDevice,
LPD3DXBUFFER* ppAdjacency,
LPD3DXBUFFER* ppMaterials,
LPD3DXBUFFER* ppEffectInstances,
DWORD* pMatOut,
LPD3DXSKININFO* ppSkinInfo,
LPD3DXMESH* ppMesh
);
这是新版SDK中函数的定义
HRESULT D3DXLoadSkinMeshFromXof(
LPD3DXFILEDATA pxofMesh,
DWORD Options,
LPDIRECT3DDEVICE9 pD3DDevice,
LPD3DXBUFFER * ppAdjacency,
LPD3DXBUFFER * ppMaterials,
LPD3DXBUFFER * ppEffectInstances,
DWORD * pMatOut,
LPD3DXSKININFO * ppSkinInfo,
LPD3DXMESH * ppMesh
);
看出区别了吧,新版的SDK将函数的第一个参数类型改为了LPD3DXFILEDATA ,所以导致编译不过。两个解决办法
- 用旧的SDK开发
- 用新的SDK开发,但是将所有的旧类型改为新类型
需要注意的是,如果安装了多个版本的SDK,那么要保证顺序的正确性,比如上面的问题,旧类型是DX8中定义的,而新类型则是DX9中定义的,所以必须DX8的库先于DX9的库被包含才行。
4. error C2146: syntax error : missing ';' before identifier 'PVOID64'
这种错误一般是由于某个类型未定义导致的,进而是由于头文件包含顺序错误导致的,这里的PVOID64应该是Windows系统定义的类型,所以只要将Windows头文件先于DX头文件被包含即可,下面的顺序就可能导致上面的错误,所以将两个路径的顺序换一下即可。
5. Macro redifination
错误如下图
这是在DirectX程序中包含了Windows.h的缘故,DirectX的头文件,如d3d9.h/d3d10.h/d3d11.h及d3dx9.h/d3dx10.h/d3dx11.h等都已经包含了windows.h,所以无需再重复包含了。
D3DCompileFromFile undefined
想使用这个函数必须用Windows版的SDK,DirectX SDK不支持这个函数。MSDN上关于这个函数的remark部分写到 The D3dcompiler_44.dll or later version of the file contains the D3DCompileFromFile compiler function.可见dll最低版本是44,而DirectX SDK中的dll版本是43(打开d3dcompiler.h文件即可看到所支持的dll版本),所以肯定不支持。
DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800
在包含dinput.h之前加上下面这句即可
#define DIRECTINPUT_VERSION 0x0800 #include <dinput.h>
DX7使用的是Dxinput7,之后才是dxinput8,直到现在。
==
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
2009-06-07 Shortest distance between two arrays