c++ - 如何获取 DirectDraw Last 错误字符串(DirectX 7)

标签 c++ directx directdraw

当我执行 DirectDraw 方法失败时,如何在 DirectX 7 中获取失败错误字符串?

if (FAILED(lpddPrimarySurface->SetPalette(lpddPalette)))
{
    MessageBox(NULL, **"I want to get the failure string here."**, "Error", MB_OK);
    return 0;
}

这里我想弹出失败信息的错误信息。如何获取错误的LPCSTR字符串?

最佳答案

对于 NTSTATUS 错误,可能出现以下情况。不确定这是否适用于 Direct Draw 和 Direct X HRESULT 错误代码,但它可能会像系统消息表中那样起作用。您不需要 ntdll 句柄,我认为也不需要,因为查找是在系统消息表上完成的。我已经指定它以防万一,因为我从未在没有它的情况下进行过测试。

请原谅静态字符数组,这只是为了展示示例,不是一个好的实现:)

static const char *NTStatusToString(DWORD NtStatusCode)
{
    LPVOID lpMessageBuffer = 0;
    HMODULE hNTDll = GetModuleHandle("ntdll.dll");
    static char szBuffer[256];

    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER |
        FORMAT_MESSAGE_FROM_SYSTEM |
        FORMAT_MESSAGE_FROM_HMODULE,
        hNTDll,
        NtStatusCode,
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR) &lpMessageBuffer,
        0,
        NULL);

    memset(szBuffer, 0, sizeof(szBuffer));
    _snprintf(szBuffer, sizeof(szBuffer)-1, "%s", lpMessageBuffer);

    LocalFree(lpMessageBuffer);

    return szBuffer;
}

这个线程表明它会起作用 How should I use FormatMessage() properly in C++?然而这个表明它不会Is there a way to get the string representation of HRESULT value using win API?你将不得不做比这更多的工作。

进一步阅读:hereherehere

关于c++ - 如何获取 DirectDraw Last 错误字符串(DirectX 7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18536154/

相关文章:

c++ - 类(class)成员范围

c++ - 如何在运行时使用 GoogleMock 在 C++ 单元测试中模拟系统调用?

c++ - 为什么这个 XMVector3Transform 调用没有返回正确的结果?

c++ - 在 Silverlight for Windows Embedded 中实现图形硬件加速

c# - Linux相当于Direct draw

c++ - 在 OpenMP 中使静态类成员线程私有(private)

c++ - X代码 6 : Unable to create watchpoint

c++ - Direct3D9 无法让垂直 fov 相机工作

c++ - 高级文件和字符串操作

windows - 针对 2D 游戏的大多数 Windows 版本?