#include #include #include "restok.h" #include "showerrs.h" extern UCHAR szDHW[]; extern CHAR szAppName[]; //............................................................ void ShowEngineErr( int n, void *p1, void *p2) { CHAR *pMsg = NULL; CHAR *pArg[2]; pArg[0] = p1; pArg[1] = p2; if ( B_FormatMessage( (FORMAT_MESSAGE_MAX_WIDTH_MASK & 78) | FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ARGUMENT_ARRAY, NULL, (DWORD)n, szDHW, DHWSIZE, (va_list *)pArg) ) { RLMessageBoxA( szDHW); } else { sprintf( szDHW, "Internal error: FormatMessage call failed: msg %d: err %Lu", n, GetLastError()); RLMessageBoxA( szDHW); } } //................................................................... void ShowErr( int n, void *p1, void *p2) { CHAR *pMsg = NULL; CHAR *pArg[2]; pArg[0] = p1; pArg[1] = p2; pMsg = GetErrMsg( n); if ( ! pMsg ) { pMsg = "Internal error: UNKNOWN ERROR MESSAGE id# %1!d!"; pArg[0] = IntToPtr(n); } if ( pMsg ) { if ( FormatMessageA( FORMAT_MESSAGE_MAX_WIDTH_MASK | 72 | FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ARGUMENT_ARRAY, pMsg, 0, 0, szDHW, DHWSIZE, (va_list *)pArg) ) { RLMessageBoxA( szDHW); } else { RLMessageBoxA( "Internal error: FormatMessage call failed"); } } else { RLMessageBoxA( "Internal error: GetErrMsg call failed"); } } //............................................................ CHAR *GetErrMsg( UINT uErrID) { static CHAR szBuf[ 1024]; int n = LoadStringA( NULL, uErrID, szBuf, sizeof( szBuf)); return( n ? szBuf : NULL); } //....................................................... //... //... Bi-Lingual FormatMessage DWORD B_FormatMessage( DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, LPSTR lpBuffer, DWORD nSize, va_list *Arguments ) { DWORD ret; //... Look for message in current locale if ( !(ret = FormatMessageA( dwFlags, lpSource, dwMessageId, LOWORD( GetThreadLocale()), lpBuffer, nSize, Arguments)) ) { //... Not found, so look for US English message if ( GetLastError() == ERROR_RESOURCE_LANG_NOT_FOUND ) { return( FormatMessageA( dwFlags, lpSource, dwMessageId, 0x0409L, lpBuffer, nSize, Arguments) ); } } return( ret); }