using System; using Microsoft.SPOT; using System.Reflection; //namespace System.Runtime.CompilerServices //{ // [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)] // public sealed class ExtensionAttribute : Attribute { } //} namespace BreakContinue.Diagnostics { /// /// Helper extension to get HRESULT name /// public static class ExceptionMessage { #region .Net MicroFramework HRESULT codes public const uint CLR_E_UNKNOWN_INSTRUCTION = 0x80000000 | 0x01000000 | 0x0000; public const uint CLR_E_UNSUPPORTED_INSTRUCTION = 0x80000000 | 0x02000000 | 0x0000; public const uint CLR_E_STACK_OVERFLOW = 0x80000000 | 0x11000000 | 0x0000; public const uint CLR_E_STACK_UNDERFLOW = 0x80000000 | 0x12000000 | 0x0000; public const uint CLR_E_ENTRY_NOT_FOUND = 0x80000000 | 0x15000000 | 0x0000; public const uint CLR_E_ASSM_WRONG_CHECKSUM = 0x80000000 | 0x16000000 | 0x0000; public const uint CLR_E_ASSM_PATCHING_NOT_SUPPORTED = 0x80000000 | 0x17000000 | 0x0000; public const uint CLR_E_SHUTTING_DOWN = 0x80000000 | 0x18000000 | 0x0000; public const uint CLR_E_OBJECT_DISPOSED = 0x80000000 | 0x19000000 | 0x0000; public const uint CLR_E_WATCHDOG_TIMEOUT = 0x80000000 | 0x1A000000 | 0x0000; public const uint CLR_E_NULL_REFERENCE = 0x80000000 | 0x21000000 | 0x0000; public const uint CLR_E_WRONG_TYPE = 0x80000000 | 0x22000000 | 0x0000; public const uint CLR_E_TYPE_UNAVAILABLE = 0x80000000 | 0x23000000 | 0x0000; public const uint CLR_E_INVALID_CAST = 0x80000000 | 0x24000000 | 0x0000; public const uint CLR_E_OUT_OF_RANGE = 0x80000000 | 0x25000000 | 0x0000; public const uint CLR_E_SERIALIZATION_VIOLATION = 0x80000000 | 0x27000000 | 0x0000; public const uint CLR_E_SERIALIZATION_BADSTREAM = 0x80000000 | 0x28000000 | 0x0000; public const uint CLR_E_INDEX_OUT_OF_RANGE = 0x80000000 | 0x29000000 | 0x0000; public const uint CLR_E_DIVIDE_BY_ZERO = 0x80000000 | 0x31000000 | 0x0000; public const uint CLR_E_BUSY = 0x80000000 | 0x33000000 | 0x0000; public const uint CLR_E_PROCESS_EXCEPTION = 0x80000000 | 0x41000000 | 0x0000; public const uint CLR_E_THREAD_WAITING = 0x80000000 | 0x42000000 | 0x0000; public const uint CLR_E_LOCK_SYNCHRONIZATION_EXCEPTION = 0x80000000 | 0x44000000 | 0x0000; public const uint CLR_E_APPDOMAIN_EXITED = 0x80000000 | 0x48000000 | 0x0000; public const uint CLR_E_APPDOMAIN_MARSHAL_EXCEPTION = 0x80000000 | 0x49000000 | 0x0000; public const uint CLR_E_NOTIMPL = 0x80000000 | 0x4a000000 | 0x0000; public const uint CLR_E_UNKNOWN_TYPE = 0x80000000 | 0x4d000000 | 0x0000; public const uint CLR_E_ARGUMENT_NULL = 0x80000000 | 0x4e000000 | 0x0000; public const uint CLR_E_IO = 0x80000000 | 0x4f000000 | 0x0000; public const uint CLR_E_ENTRYPOINT_NOT_FOUND = 0x80000000 | 0x50000000 | 0x0000; public const uint CLR_E_DRIVER_NOT_REGISTERED = 0x80000000 | 0x51000000 | 0x0000; // // Gp IO error codes // public const uint CLR_E_PIN_UNAVAILABLE = 0x80000000 | 0x54000000 | 0x0000; public const uint CLR_E_PIN_DEAD = 0x80000000 | 0x55000000 | 0x0000; public const uint CLR_E_INVALID_OPERATION = 0x80000000 | 0x56000000 | 0x0000; public const uint CLR_E_WRONG_INTERRUPT_TYPE = 0x80000000 | 0x57000000 | 0x0000; public const uint CLR_E_NO_INTERRUPT = 0x80000000 | 0x58000000 | 0x0000; public const uint CLR_E_DISPATCHER_ACTIVE = 0x80000000 | 0x59000000 | 0x0000; // // IO error codes // public const uint CLR_E_FILE_IO = 0x80000000 | 0x60000000 | 0x0000; public const uint CLR_E_INVALID_DRIVER = 0x80000000 | 0x61000000 | 0x0000; public const uint CLR_E_FILE_NOT_FOUND = 0x80000000 | 0x62000000 | 0x0000; public const uint CLR_E_DIRECTORY_NOT_FOUND = 0x80000000 | 0x63000000 | 0x0000; public const uint CLR_E_VOLUME_NOT_FOUND = 0x80000000 | 0x64000000 | 0x0000; public const uint CLR_E_PATH_TOO_LONG = 0x80000000 | 0x65000000 | 0x0000; public const uint CLR_E_DIRECTORY_NOT_EMPTY = 0x80000000 | 0x66000000 | 0x0000; public const uint CLR_E_UNAUTHORIZED_ACCESS = 0x80000000 | 0x67000000 | 0x0000; public const uint CLR_E_PATH_ALREADY_EXISTS = 0x80000000 | 0x68000000 | 0x0000; public const uint CLR_E_TOO_MANY_OPEN_HANDLES = 0x80000000 | 0x69000000 | 0x0000; // // General error codes // public const uint CLR_E_NOT_SUPPORTED = 0x80000000 | 0x77000000 | 0x0000; public const uint CLR_E_RESCHEDULE = 0x80000000 | 0x78000000 | 0x0000; public const uint CLR_E_OUT_OF_MEMORY = 0x80000000 | 0x7A000000 | 0x0000; public const uint CLR_E_RESTART_EXECUTION = 0x80000000 | 0x7B000000 | 0x0000; public const uint CLR_E_INVALID_PARAMETER = 0x80000000 | 0x7D000000 | 0x0000; public const uint CLR_E_TIMEOUT = 0x80000000 | 0x7E000000 | 0x0000; public const uint CLR_E_FAIL = 0x80000000 | 0x7f000000 | 0x0000; //--// public const uint CLR_S_THREAD_EXITED = 0x01000000 | 0x0000; public const uint CLR_S_QUANTUM_EXPIRED = 0x02000000 | 0x0000; public const uint CLR_S_NO_READY_THREADS = 0x03000000 | 0x0000; public const uint CLR_S_NO_THREADS = 0x04000000 | 0x0000; public const uint CLR_S_RESTART_EXECUTION = 0x05000000 | 0x0000; // // PARSER error codes. // public const uint CLR_E_PARSER_BAD_TEXT_SIGNATURE = 0x80000000 | 0x01010000 | 0x0001; public const uint CLR_E_PARSER_BAD_CUSTOM_ATTRIBUTE = 0x80000000 | 0x01010000 | 0x0002; public const uint CLR_E_PARSER_UNSUPPORTED_MULTIDIM_ARRAY = 0x80000000 | 0x01010000 | 0x0003; public const uint CLR_E_PARSER_UNKNOWN_MEMBER_REF = 0x80000000 | 0x01010000 | 0x0004; public const uint CLR_E_PARSER_MISSING_FIELD = 0x80000000 | 0x01010000 | 0x0005; public const uint CLR_E_PARSER_MISSING_METHOD = 0x80000000 | 0x01010000 | 0x0006; public const uint CLR_E_PARSER_MISSING_INTERFACE = 0x80000000 | 0x01010000 | 0x0007; public const uint CLR_E_PARSER_MISSING_TOKEN = 0x80000000 | 0x01010000 | 0x0008; public const uint CLR_E_PARSER_UNSUPPORTED_GENERICS = 0x80000000 | 0x01010000 | 0x0009; #endregion /// /// Extension method that returns "name" of the hresult code as it is defined in MF /// /// /// static public string HResultToString(this Exception ex) { string ret = string.Empty; //I have to use reflection because m_HResult is a protected field Type exceptionType = typeof(Exception); FieldInfo hresultFieldInfo = exceptionType.GetField("m_HResult", BindingFlags.Instance | BindingFlags.NonPublic); uint hResult = hresultFieldInfo != null ? (uint)hresultFieldInfo.GetValue(ex) : 0; switch (hResult) { case CLR_E_UNKNOWN_INSTRUCTION: ret = "CLR_E_UNKNOWN_INSTRUCTION"; break; case CLR_E_UNSUPPORTED_INSTRUCTION: ret = "CLR_E_UNSUPPORTED_INSTRUCTION"; break; case CLR_E_STACK_OVERFLOW: ret = "CLR_E_STACK_OVERFLOW"; break; case CLR_E_STACK_UNDERFLOW: ret = "CLR_E_STACK_UNDERFLOW"; break; case CLR_E_ENTRY_NOT_FOUND: ret = "CLR_E_ENTRY_NOT_FOUND"; break; case CLR_E_ASSM_WRONG_CHECKSUM: ret = "CLR_E_ASSM_WRONG_CHECKSUM"; break; case CLR_E_ASSM_PATCHING_NOT_SUPPORTED: ret = "CLR_E_ASSM_PATCHING_NOT_SUPPORTED"; break; case CLR_E_SHUTTING_DOWN: ret = "CLR_E_SHUTTING_DOWN"; break; case CLR_E_OBJECT_DISPOSED: ret = "CLR_E_OBJECT_DISPOSED"; break; case CLR_E_WATCHDOG_TIMEOUT: ret = "CLR_E_OBJECT_DISPOSED"; break; case CLR_E_NULL_REFERENCE: ret = "CLR_E_NULL_REFERENCE"; break; case CLR_E_WRONG_TYPE: ret = "CLR_E_WRONG_TYPE"; break; case CLR_E_TYPE_UNAVAILABLE: ret = "CLR_E_TYPE_UNAVAILABLE"; break; case CLR_E_INVALID_CAST: ret = "CLR_E_INVALID_CAST"; break; case CLR_E_OUT_OF_RANGE: ret = "CLR_E_OUT_OF_RANGE"; break; case CLR_E_SERIALIZATION_VIOLATION: ret = "CLR_E_SERIALIZATION_VIOLATION"; break; case CLR_E_SERIALIZATION_BADSTREAM: ret = "CLR_E_SERIALIZATION_BADSTREAM"; break; case CLR_E_INDEX_OUT_OF_RANGE: ret = "CLR_E_INDEX_OUT_OF_RANGE"; break; case CLR_E_DIVIDE_BY_ZERO: ret = "CLR_E_DIVIDE_BY_ZERO"; break; case CLR_E_BUSY: ret = "CLR_E_BUSY"; break; case CLR_E_PROCESS_EXCEPTION: ret = "CLR_E_PROCESS_EXCEPTION"; break; case CLR_E_THREAD_WAITING: ret = "CLR_E_THREAD_WAITING"; break; case CLR_E_LOCK_SYNCHRONIZATION_EXCEPTION: ret = "CLR_E_LOCK_SYNCHRONIZATION_EXCEPTION"; break; case CLR_E_APPDOMAIN_EXITED: ret = "CLR_E_APPDOMAIN_EXITED"; break; case CLR_E_APPDOMAIN_MARSHAL_EXCEPTION: ret = "CLR_E_APPDOMAIN_MARSHAL_EXCEPTION"; break; case CLR_E_NOTIMPL: ret = "CLR_E_NOTIMPL"; break; case CLR_E_UNKNOWN_TYPE: ret = "CLR_E_UNKNOWN_TYPE"; break; case CLR_E_ARGUMENT_NULL: ret = "CLR_E_ARGUMENT_NULL"; break; case CLR_E_IO: ret = "CLR_E_IO"; break; case CLR_E_ENTRYPOINT_NOT_FOUND: ret = "CLR_E_ENTRYPOINT_NOT_FOUND"; break; case CLR_E_DRIVER_NOT_REGISTERED: ret = "CLR_E_DRIVER_NOT_REGISTERED"; break; case CLR_E_PIN_UNAVAILABLE: ret = "CLR_E_PIN_UNAVAILABLE"; break; case CLR_E_PIN_DEAD: ret = "CLR_E_PIN_DEAD"; break; case CLR_E_INVALID_OPERATION: ret = "CLR_E_INVALID_OPERATION"; break; case CLR_E_WRONG_INTERRUPT_TYPE: ret = "CLR_E_WRONG_INTERRUPT_TYPE"; break; case CLR_E_NO_INTERRUPT: ret = "CLR_E_NO_INTERRUPT"; break; case CLR_E_DISPATCHER_ACTIVE: ret = "CLR_E_DISPATCHER_ACTIVE"; break; case CLR_E_FILE_IO: ret = "CLR_E_FILE_IO"; break; case CLR_E_INVALID_DRIVER: ret = "CLR_E_INVALID_DRIVER"; break; case CLR_E_FILE_NOT_FOUND: ret = "CLR_E_FILE_NOT_FOUND"; break; case CLR_E_DIRECTORY_NOT_FOUND: ret = "CLR_E_DIRECTORY_NOT_FOUND"; break; case CLR_E_VOLUME_NOT_FOUND: ret = "CLR_E_VOLUME_NOT_FOUND"; break; case CLR_E_PATH_TOO_LONG: ret = "CLR_E_PATH_TOO_LONG"; break; case CLR_E_DIRECTORY_NOT_EMPTY: ret = "CLR_E_DIRECTORY_NOT_EMPTY"; break; case CLR_E_UNAUTHORIZED_ACCESS: ret = "CLR_E_UNAUTHORIZED_ACCESS"; break; case CLR_E_PATH_ALREADY_EXISTS: ret = "CLR_E_PATH_ALREADY_EXISTS"; break; case CLR_E_TOO_MANY_OPEN_HANDLES: ret = "CLR_E_TOO_MANY_OPEN_HANDLES"; break; case CLR_E_NOT_SUPPORTED: ret = "CLR_E_NOT_SUPPORTED"; break; case CLR_E_RESCHEDULE: ret = "CLR_E_RESCHEDULE"; break; case CLR_E_OUT_OF_MEMORY: ret = "CLR_E_OUT_OF_MEMORY"; break; case CLR_E_RESTART_EXECUTION: ret = "CLR_E_RESTART_EXECUTION"; break; case CLR_E_INVALID_PARAMETER: ret = "CLR_E_INVALID_PARAMETER"; break; case CLR_E_TIMEOUT: ret = "CLR_E_TIMEOUT"; break; case CLR_E_FAIL: ret = "CLR_E_FAIL"; break; case CLR_S_THREAD_EXITED: ret = "CLR_S_THREAD_EXITED"; break; case CLR_S_QUANTUM_EXPIRED: ret = "CLR_S_QUANTUM_EXPIRED"; break; case CLR_S_NO_READY_THREADS: ret = "CLR_S_NO_READY_THREADS"; break; case CLR_S_NO_THREADS: ret = "CLR_S_NO_THREADS"; break; case CLR_S_RESTART_EXECUTION: ret = "CLR_S_RESTART_EXECUTION"; break; case CLR_E_PARSER_BAD_TEXT_SIGNATURE: ret = "CLR_E_PARSER_BAD_TEXT_SIGNATURE"; break; case CLR_E_PARSER_BAD_CUSTOM_ATTRIBUTE: ret = "CLR_E_PARSER_BAD_CUSTOM_ATTRIBUTE"; break; case CLR_E_PARSER_UNSUPPORTED_MULTIDIM_ARRAY: ret = "CLR_E_PARSER_UNSUPPORTED_MULTIDIM_ARRAY"; break; case CLR_E_PARSER_UNKNOWN_MEMBER_REF: ret = "CLR_E_PARSER_UNKNOWN_MEMBER_REF"; break; case CLR_E_PARSER_MISSING_FIELD: ret = "CLR_E_PARSER_MISSING_FIELD"; break; case CLR_E_PARSER_MISSING_METHOD: ret = "CLR_E_PARSER_MISSING_METHOD"; break; case CLR_E_PARSER_MISSING_INTERFACE: ret = "CLR_E_PARSER_MISSING_INTERFACE"; break; case CLR_E_PARSER_MISSING_TOKEN: ret = "CLR_E_PARSER_MISSING_TOKEN"; break; case CLR_E_PARSER_UNSUPPORTED_GENERICS: ret = "CLR_E_PARSER_UNSUPPORTED_GENERICS"; break; default: ret = "UNKNOWN"; break; } return ret; } } }