module; #include #include export module dxcommon; using Microsoft::WRL::ComPtr; namespace dx { export { class exception : public std::exception { public: exception() noexcept = default; exception(HRESULT result, const char* file, int line) noexcept { sprintf_s(m_error, sizeof(m_error), "%s:%d Failed with HRESULT = %08X", file, line, static_cast(result)); } exception(const char* error, const char* file, int line) noexcept { sprintf_s(m_error, sizeof(m_error), "%s:%d %s", file, line, error); } [[nodiscard]] const char* what() const noexcept final { return m_error; } private: static thread_local char m_error[1024]; }; template void SafeRelease(ComPtr& ptr) { if (ptr) { ptr->Release(); ptr = nullptr; } } } // export thread_local char exception::m_error[1024]; } // dx