I took a look at the code... the original is a bad dog.
Before I jump into this, which I may if time allows, may I at least suggest updating the API test to do something useful?
Soma
Code:
void mbox_error_handler
(
const std::string & from_f,
const std::size_t where_f,
const bool show_f
)
{
if(show_f)
{
const DWORD buffer_length(256);
char message_buffer[buffer_length];
const DWORD characters_written = FormatMessageA
(
FORMAT_MESSAGE_FROM_SYSTEM,
0, // lpSource (ignored here)
GetLastError(),
0, // dwLanguageId (use system defaults)
message_buffer,
buffer_length,
0 // Arguments (pointless VA_LIST nonsense)
);
std::ostringstream message;
if(0 == characters_written)
{
message
<< "File: " << from_f << '\n'
<< "Line Number: " << where_f << '\n'
<< "Error Message:\n"
<< "unknown exception"
;
}
else
{
message_buffer[characters_written - 2] = 0;
message
<< "File: " << from_f << '\n'
<< "Line Number: " << where_f << '\n'
<< "Error Message:\n"
<< message_buffer
;
}
MessageBoxA
(
0, // hWnd (no owner)
message.str().c_str(),
"WIN32API Exception",
MB_ICONERROR | MB_OK | MB_TASKMODAL
);
}
}
#define WINAPITEST(BADVALUE, RESULT) mbox_error_handler(__FILE__, __LINE__, BADVALUE == RESULT)