// // ErrorHandler.cpp // // Print out fancy error messages // // #include "ErrorHandler.h" #include "ChkLock.h" #include <stdio.h> void ErrorHandler( char *szModule, char *szSymptom, DWORD dwErrorNum ) { char *szMessageBuffer; char *szMessage; HINSTANCE hNetMsg; DWORD dwBufferLength; DWORD dwMessageFlags; // Initialize variables szMessage = new char[ MAX_ERROR_TEXT ]; hNetMsg = NULL; szMessageBuffer = NULL; dwBufferLength = 0; dwMessageFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK | FORMAT_MESSAGE_FROM_SYSTEM ; memset( szMessage, 0, MAX_ERROR_TEXT ); // If it's a NET error, load the proper message table if ((dwErrorNum >= NERR_BASE) && (dwErrorNum <= MAX_NERR)) { hNetMsg = LoadLibraryEx( "netmsg.dll", NULL, LOAD_LIBRARY_AS_DATAFILE ); if (hNetMsg != NULL) { dwMessageFlags |= FORMAT_MESSAGE_FROM_HMODULE; } } if (dwErrorNum < WSABASEERR) { // Format the message and print it out if (FormatMessage( dwMessageFlags, hNetMsg, // If this is still null, just use system errors dwErrorNum, 0, (LPSTR)&szMessageBuffer, 0, NULL )) { // Format the body sprintf( szMessage, TEXT_STRING, szSymptom, dwErrorNum, szMessageBuffer ); // Show the message cout<<szMessage<<endl; } else { // Format the body sprintf( szMessage, TEXT_STRING, szSymptom, dwErrorNum, "No text available for this message" ); cout<<szMessage<<endl; } // Did FormatMessage work? } else { // Format the body sprintf( szMessage, TEXT_STRING, szSymptom, dwErrorNum, "No text available for this message" ); // Show the message cout<<szMessage<<endl; } // Free the library, if we loaded it if (hNetMsg != NULL) { FreeLibrary( hNetMsg ); } // Return memory delete szMessage; } // (ErrorHandler)
Back to the ChkLock source code page |
This page is maintained by Peyton Engel.
Last updated 13 October 2000