Я пытаюсь создать макрос отладки для вызовов d3d11. Вот как это выглядит:
#define ERROR_MSG(DESC, MSG, CODE)\
MessageBox(nullptr, MSG, DESC, MB_ICONERROR | MB_OK);\
exit(CODE);
#define ASSER_D3D11_CALL(CALL)\
{\
DWORD msg = HRESULT_CODE(CALL);\
if(msg != 0)\
{\
LPSTR str = nullptr;\
if(0 == FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS,\
NULL,\
msg,\
LANG_ENGLISH,\
str,\
32,\
nullptr))\
{\
ERROR_MSG("Unknown Error", str, msg);\
}\
ERROR_MSG("Error", str, msg);\
}\
}
Когда я пытаюсь симулировать ошибку, я не получаю никакого сообщения, FormatMessage () возвращает 0. Вот код, который вызывает ошибку. Я попробовал это и в других случаях.
DXGI_SWAP_CHAIN_DESC d_SwapChain{ 0 };
... some setup that works...
d_SwapChain.OutputWindow = wnd.m_hwnd + 1; // adding 1 here causes error
...
// Create device and buffers
ASSER_D3D11_CALL(D3D11CreateDeviceAndSwapChain(...correctly configured stuff...));
Что я могу сделать, чтобы получить сообщение об ошибке?