3

我正在关注 Frank D. Luna 所著的“DirectX11 3D 游戏编程简介”一书。当我尝试构建我的项目时,我遇到了这些错误。

>BoxDemo.obj : error LNK2019: unresolved external symbol _D3DX11CompileFromFileW@44 referenced in function "private: void __thiscall BoxApp::BuildFX(void)" (?BuildFX@BoxApp@@AAEXXZ)
>BoxDemo.obj : error LNK2019: unresolved external symbol _D3DX11CreateEffectFromMemory@20 referenced in function "private: void __thiscall BoxApp::BuildFX(void)" (?BuildFX@BoxApp@@AAEXXZ)
>BoxDemo.obj : error LNK2019: unresolved external symbol _DXTraceW@20 referenced in function "private: void __thiscall BoxApp::BuildFX(void)" (?BuildFX@BoxApp@@AAEXXZ)
>d3dApp.obj : error LNK2001: unresolved external symbol _DXTraceW@20
>d3dUtil.obj : error LNK2001: unresolved external symbol _DXTraceW@20
>TextureMgr.obj : error LNK2001: unresolved external symbol _DXTraceW@20
>d3dApp.obj : error LNK2019: unresolved external symbol _D3D11CreateDevice@40 referenced in function "protected: bool __thiscall D3DApp::InitDirect3D(void)" (?InitDirect3D@D3DApp@@IAE_NXZ)
>d3dUtil.obj : error LNK2019: unresolved external symbol _D3DX11CreateTextureFromFileW@24 referenced in function "public: static struct ID3D11ShaderResourceView * __cdecl d3dHelper::CreateTexture2DArraySRV(struct ID3D11Device *,struct ID3D11DeviceContext *,class std::vector<class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >,class std::allocator<class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > > > &,enum DXGI_FORMAT,unsigned int,unsigned int)" (?CreateTexture2DArraySRV@d3dHelper@@SAPAUID3D11ShaderResourceView@@PAUID3D11Device@@PAUID3D11DeviceContext@@AAV?$vector@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@V?$allocator@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@@std@@W4DXGI_FORMAT@@II@Z)
>TextureMgr.obj : error LNK2019: unresolved external symbol _D3DX11CreateShaderResourceViewFromFileW@24 referenced in function "public: struct ID3D11ShaderResourceView * __thiscall TextureMgr::CreateTexture(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >)" (?CreateTexture@TextureMgr@@QAEPAUID3D11ShaderResourceView@@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@Z)

我必须获取 Effects11.lib 的源代码并为 VS2013 重建它,并且我已经包含并链接了我所知道的所有内容。不知道如何解决这些问题。

4

1 回答 1

13

回复:D3D11CreateDevice

您需要添加d3d11.lib到您的链接库依赖项。一个简单的方法是添加到您的 .cpp 源中:

#pragma comment(lib,"d3d11.lib")

回复:D3DX11CompileFromFileW、D3DX11CreateTextureFromFile、D3DX11CreateShaderResourceViewFromFileW

D3DX11 已弃用,不属于 VS 2013 中内置的 Windows 8.1 SDK 的一部分。请参阅DirectX SDK 在哪里?.

从您的链接库依赖项中删除#include <d3dx11.h>和删除。d3dx11.lib

添加#include <d3dcompiler.h>d3dcompiler.lib来自您的链接库依赖项。

而不是使用D3DX11CompileFromFileW,使用D3DCompileFromFile

最新版本的Effects 11可以D3DX11CreateEffectFromFile替代两者D3DX11CompileFromFileWD3DX11CreateEffectFromMemory因为这可能就是您在那里所做的。您可以通过 NuGet for VS 2013 Win32 桌面应用程序 ( fx11_desktop_2013 ) 将 Effects 11 添加到您的项目中。

代替D3DX11CreateTextureFromFileand ,使用D3DX11CreateShaderResourceViewFromFileWDDSTextureLoader 函数CreateDDSTextureFromFileDirectX Tool Kit代替。您可以通过 NuGet for VS 2013 ( directxtk_desktop_2013 )将DirectX 工具包添加到您的项目中。CreateWICTextureFromFile

回复:DXTraceW

这篇文章中获取最新信息dxerr.cpp并将它们添加到您的项目中。dxerr.h

更新:虽然 D3DX9/D3DX10/D3DX11 自 2010 年 6 月以来仍被弃用且未更改,但如果您必须使用它们而不是替代品,您可以使用Microsoft.DXSDK.D3DX NuGet 包。这包括这些 DLL 的 SHA-256 签名版本和并行部署许可证。请参阅此博客文章

于 2015-01-13T23:43:32.097 回答