NTSTATUS エラーの場合、次の可能性があります。これが Direct Draw および Direct X HRESULT エラー コードで機能するかどうかは不明ですが、システム メッセージ テーブルにある可能性があるため、機能する可能性があります。システム メッセージ テーブルでルックアップが行われるため、ntdll ハンドルも必要ないと思います。それなしでテストしたことがないので、念のため指定しました。
静的な char 配列を許してください。これは例を示すためのものであり、適切な実装ではありません :)
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;
}
このスレッドは、それが機能することを示唆しています C++ で FormatMessage() を適切に使用するにはどうすればよいですか? win API を使用して HRESULT 値の文字列表現を取得する方法はありますか? そして、これよりも少し多くの作業を行う必要があります。
さらに読む:こことこことここ