141 lines
3.3 KiB
C
141 lines
3.3 KiB
C
|
#include <windows.h>
|
||
|
|
||
|
#include <stdio.h>
|
||
|
|
||
|
#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);
|
||
|
}
|