zoukankan      html  css  js  c++  java
  • 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,直到现在。

    ==

  • 相关阅读:
    ubuntu挂载群晖共享文件
    200. 岛屿数量_中等_不再记笔记了
    733. 图像渲染_简单_矩阵
    46. 全排列_中等_模拟
    37. 解数独_困难_矩阵
    1041. 困于环中的机器人_中等_模拟
    946. 验证栈序列
    415. 字符串相加_简单_模拟
    164. 最大间距_数组_困难
    215. 数组中的第K个最大元素_中等_数组
  • 原文地址:https://www.cnblogs.com/graphics/p/1753360.html
Copyright © 2011-2022 走看看