Games for Windows and the DirectX SDK blog

Technical tips, tricks, and news about game development for Microsoft platforms including desktop, Xbox, and UWP

Project maintained by walbourn Hosted on GitHub Pages — Theme by mattgraham
Home | Posts by Tag | Posts by Month

Where's DXERR.LIB?


Originally posted to Chuck Walbourn's Blog on MSDN,

One of the little utility libraries in the DirectX SDK is a static library for converting HRESULTs to text strings for debugging and diagnostics known as DXERR.LIB. There were once even older versions of this library, DXERR8.LIB and DXERR9.LIB, but they were removed from the DirectX SDK many years back in favor of a unified DXERR.LIB. The DirectX Error Lookup Utility is nothing more than a little front-end UI tool for getting results from DXERR.LIB.

For the Windows SDK 8.0 this library was not brought forward (see “Where is the DirectX SDK?”). This is primarily because HRESULTS for DirectX graphics APIs were added to the FormatMessage function when using FORMAT_MESSAGE_FROM_SYSTEM in Windows 8 which already supports most of the system error codes reported by DXERR. The DirectX SDK version of DXERR.LIB also contained a lot of error codes for legacy components that are no longer relevant to development using the Windows SDK 8.0.

DXERR.LIB contained the following functions (both ASCII and UNICODE):

  • DXGetErrorString
  • DXGetErrorDescription
  • DXTrace


If you are still using legacy components like D3DX, DXUT, etc. from the DirectX SDK then you can continue to link to the legacy version of DXERR.LIB as well. For those wanting to get away from dependencies on the DirectX SDK as we’ve recommended, I’ve attached a streamlined version of the library to this post. It only supports UNICODE and I had to change DXGetErrorDescription to copy the result to a buffer rather than return a static string in order to make use of FormatMessage where possible, but otherwise it should serve much the same purpose. You can modify it to suit your needs a well.

Note: The FormatMessage flag FORMAT_MESSAGE_ALLOCATE_BUFFER is not supported for Windows Store apps because it makes use of LocalAlloc.

The source code for this package is bound to the MIT license.

While we are on the topic of utility libraries, the DXGUID.LIB static library is also present in the Windows SDK 8.0 with the Direct3D 11.1, Direct2D, DirectWrite, and WIC GUIDs added; and the XACT and XAUDIO2 GUIDs removed. There’s nothing particular special about DXGUID.LIB because you could easily define the GUIDs using #define INITGUID before including the relevant headers in one (and only one) module of your program yourself, but it is very convenient not to have to do that.

Update: in DXTraceW now takes __FILEW__ along with some /analyze and /W4 cleanup, support for WINAPI_FAMILY macros; define NOMINMAX; some fixes for VS 2015 printf string portability, package updated on November 9, 2015.

Update: Updated based on this blog post, package updated on June 2, 2021.

DXUT: This DXERR is included in the DXUT for Win32 Desktop Update

VS 2015/2017: The VS 2015/2017 C Runtime is not compatible with the DXERR.LIB that ships in the legacy DirectX SDK. You will get link errors trying to use it. You can use this module to replace DXERR LIB but will have to rebuild the code that uses it. You can try linking with legacy_stdio_definitions.lib instead, but ideally you’d remove this dependency on the legacy DirectX SDK.