Windows-Server-2003/inetcore/outlookexpress/inc/sterror.h

115 lines
4.0 KiB
C

// --------------------------------------------------------------------------------
// STERROR.H
// --------------------------------------------------------------------------------
#ifndef __STERROR_H
#define __STERROR_H
// --------------------------------------------------------------------------------
// REPORTERRORINFO
// --------------------------------------------------------------------------------
typedef struct tagREPORTERRORINFO {
UINT nTitleIds; // Title of the messagebox
UINT nPrefixIds; // Prefix string resource id
UINT nErrorIds; // Error string resource id
UINT nReasonIds; // Reason string resource id
BOOL nHelpIds; // Help String Resource Id
LPCSTR pszExtra1; // Extra parameter 1
ULONG ulLastError; // GetLastError() Value
} REPORTERRORINFO, *LPREPORTERRORINFO;
// --------------------------------------------------------------------------------
// ReportError - Shared between main Dll and EXE Startup Code
// --------------------------------------------------------------------------------
BOOL ReportError(
HINSTANCE hInstance, // Dll Instance
HRESULT hrResult, // HRESULT of the error
LONG lResult, // LRESULT from like a registry function
LPREPORTERRORINFO pInfo) // Report Error Information
{
// Locals
CHAR szRes[255];
CHAR szMessage[1024];
CHAR szTitle[128];
// INit
*szMessage = '\0';
// Is there a prefix
if (pInfo->nPrefixIds)
{
// Load the string
LoadString(hInstance, pInfo->nPrefixIds, szMessage, ARRAYSIZE(szMessage));
}
// Error ?
if (pInfo->nErrorIds)
{
// Are there extras in this error string
if (NULL != pInfo->pszExtra1)
{
// Locals
CHAR szTemp[255];
// Load and format
LoadString(hInstance, pInfo->nErrorIds, szTemp, ARRAYSIZE(szTemp));
// Format the string
wnsprintf(szRes, ARRAYSIZE(szRes), szTemp, pInfo->pszExtra1);
}
// Load the string
else
{
// Load the error string
LoadString(hInstance, pInfo->nErrorIds, szRes, ARRAYSIZE(szRes));
}
// Add to szMessage
StrCatBuff(szMessage, g_szSpace, ARRAYSIZE(szMessage));
StrCatBuff(szMessage, szRes, ARRAYSIZE(szMessage));
}
// Reason ?
if (pInfo->nReasonIds)
{
// Load the string
LoadString(hInstance, pInfo->nReasonIds, szRes, ARRAYSIZE(szRes));
// Add to szMessage
StrCatBuff(szMessage, g_szSpace, ARRAYSIZE(szMessage));
StrCatBuff(szMessage, szRes, ARRAYSIZE(szMessage));
}
// Load the string
LoadString(hInstance, pInfo->nHelpIds, szRes, ARRAYSIZE(szRes));
// Add to szMessage
StrCatBuff(szMessage, g_szSpace, ARRAYSIZE(szMessage));
StrCatBuff(szMessage, szRes, ARRAYSIZE(szMessage));
// Append Error Results
if (lResult != 0 && E_FAIL == hrResult && pInfo->ulLastError)
wnsprintf(szRes, ARRAYSIZE(szRes), "(%d, %d)", lResult, pInfo->ulLastError);
else if (lResult != 0 && E_FAIL == hrResult && 0 == pInfo->ulLastError)
wnsprintf(szRes, ARRAYSIZE(szRes), "(%d)", lResult);
else if (pInfo->ulLastError)
wnsprintf(szRes, ARRAYSIZE(szRes), "(0x%08X, %d)", hrResult, pInfo->ulLastError);
else
wnsprintf(szRes, ARRAYSIZE(szRes), "(0x%08X)", hrResult);
// Add to szMessage
StrCatBuff(szMessage, g_szSpace, ARRAYSIZE(szMessage));
StrCatBuff(szMessage, szRes, ARRAYSIZE(szMessage));
// Get the title
LoadString(hInstance, pInfo->nTitleIds, szTitle, ARRAYSIZE(szTitle));
// Show the error message
MessageBox(NULL, szMessage, szTitle, MB_OK | MB_SETFOREGROUND | MB_ICONEXCLAMATION);
// Done
return TRUE;
}
#endif // __STERROR_H