Moo*_*ody 27 directx windows-7 visual-studio-2015
我在Windows 7和Visual Studio社区2015 RC上运行DirectX 11应用程序.我还在使用DX SDK中的功能.它在VS2013上工作正常但是当我切换时我只得到以下错误:
Error LNK2019 unresolved external symbol __vsnprintf referenced in function "long __stdcall StringVPrintfWorkerA(char *,unsigned int,unsigned int *,char const *,char *)" (?StringVPrintfWorkerA@@YGJPADIPAIPBD0@Z) Ancora D:\Moody\Moody\Projects\Projects\Ancora\Ancora\dxerr.lib(dxerra.obj) 1
Run Code Online (Sandbox Code Playgroud)
我只使用dxerr库中的DXGetErrorDescriptionA函数,当我将它注释掉时,程序编译得很好.我不知道出了什么问题,但它不能来自DX SDK,否则其他功能会失败吧?
小智 54
我遇到了同样的问题DXGetErrorMessage(),Dx9并发现MS提供了一个额外的库,包含在Additional Dependencies属性页面中以解决这个问题.库名是:legacy_stdio_definitions.lib
添加这个解决了我的问题.
小智 23
您可以添加,而不是手动黑客攻击dxerr.lib
#include <Windows.h>
#include <stdio.h>
int (WINAPIV * __vsnprintf)(char *, size_t, const char*, va_list) = _vsnprintf;
Run Code Online (Sandbox Code Playgroud)
你代码中的某个地方
加上
#pragma comment(lib, "legacy_stdio_definitions.lib")
Run Code Online (Sandbox Code Playgroud)
https://msdn.microsoft.com/en-us/library/bb531344.aspx
旧版 DirectX SDK 已经很旧了,并且dxerr.lib在 DXSDK 中与您遇到的 VS 2015 的 C 运行时不兼容。
一般来说,包含代码的静态库不能与不同版本的编译器很好地混合。旧版 DirectX SDK 中的大多数 .lib 都适用于 VS 2015,因为它们是 dll 或所有数据库的导入库,因此根本不包含任何代码。DXSDK 自 VS 2010 以来未更新。
旁白:VS 团队做出了英勇的努力,以根据Microsoft Docs保持 Visual C/C++ 运行时链接在 VS 2015 Update 3、VS 2017 和 VS 2019 之间兼容。这不是正常模式。
请务必阅读Microsoft Docs上有关将旧版 DirectX SDK 与 VS 2015 使用的 Windows 8.x SDK 混合的正确方法的说明。您可能在此项目中使用了旧版 DirectX SDK 中的其他内容,除了 dxerr。
我已经实现了一个 DXERR 版本,您可以从项目中的源代码构建该版本,以删除旧版 DirectX SDK 的这种依赖性。看到这个帖子详细信息,。也就是说,我特意只支持 Unicode(W 版本)。您可以很容易地弄清楚如何制作 ANSI(A 版本),但最好将您的应用程序更新为使用 Unicode。
请参阅DirectX SDK(2021 版)在哪里?和用于 Direct3D 11 的 DXUT。
更新:如另一个答案中所述,链接legacy_stdio_definitions.lib应该使旧的旧版 DirectX SDK 版本dxerr.lib再次与 VS 2015/2017 链接。也就是说,您应该尽可能地消除对旧版 DirectX SDK 的依赖,并且 DXERR 很容易被您自己的模块替换。请参阅没有 D3DX 的生活。
| 归档时间: |
|
| 查看次数: |
30825 次 |
| 最近记录: |