Alphabetical Class Index  Class Hierarchy   File Members   Compound Members   File List  

HResult.h
00001 //-----------------------------------------------------------------------------
00002 // A utility class that helps with HRESULTS and error checking.
00003 // To Use:
00004 //
00005 //   HResult hr = comObj->func();
00006 //
00007 // If the result fails, an exception will be thrown with the
00008 // offending HRESULT.
00009 // Typically, one uses this as:
00010 //
00011 // HRESULT someFunction() 
00012 // {
00013 //   HResult hr;
00014 //   try 
00015 //   {
00016 //      hr = comObj->func();
00017 //   }
00018 //   catch(HRESULT hResult) 
00019 //   {
00020 //      throw hResult;
00021 //   }
00022 //   return S_OK;
00023 // }
00024 
00025 #ifndef _HRESULT_H__
00026 #define _HRESULT_H__
00027 #ifdef __APPLE__
00028 #include <CoreFoundation/CFPluginCOM.h>
00029 #endif
00030 
00031 #ifndef UNREFERENCED
00032 #define UNREFERENCED(param) ((void)(param))
00033 #endif
00034 
00035 
00036 #ifdef _DEBUG
00037 #ifndef _WINDEF_
00038 extern "C" __declspec(dllimport) void __stdcall OutputDebugStringA (char const * str);
00039 #define OutputDebugString OutputDebugStringA
00040 #endif
00041 
00042 #include <stdio.h>
00043 #include <stdarg.h>
00044 inline void dprintf (char const * format, ...) {
00045     char        buffer[1024];
00046     va_list     arguments;
00047 
00048     va_start (arguments, format);  
00049     vsprintf (buffer, format, arguments);
00050     va_end (arguments);  
00051 #ifdef _MSC_VER
00052 #ifndef _WIN32_WCE
00053     OutputDebugStringA (buffer);
00054 #endif
00055 #else
00056     fprintf (stderr, buffer);
00057 #endif
00058 }
00059 #else
00060 inline void dprintf (char const * format, ...) {
00061     UNREFERENCED(format);
00062 }
00063 #endif
00064 
00065 
00066 class HResult 
00067 {
00068 public:
00069     HResult(HRESULT hr)
00070     {
00071         m_hr = hr;
00072         if(FAILED(hr))
00073         {
00074             //throw hr;
00075             dprintf("HRESULT error %x\n", hr);
00076         }
00077     }
00078     HResult()
00079     {
00080     }
00081 
00082     HResult& operator=(HRESULT hr)
00083     {
00084         m_hr = hr;
00085         if(FAILED(hr))
00086         {
00087             //throw hr;
00088             dprintf("HRESULT error %x\n", hr);
00089         }
00090         return *this;
00091     }
00092 
00093     bool operator==(HRESULT hr)
00094     {
00095         if (m_hr==hr)
00096         {
00097             return true;
00098         }
00099         else
00100         {
00101             return false;
00102         }
00103     }
00104 
00105     bool Succeeded()
00106     {
00107         return SUCCEEDED(m_hr);
00108     }
00109 
00110     bool Failed()
00111     {
00112         return FAILED(m_hr);
00113     }
00114 private:
00115 
00116     HRESULT m_hr;
00117 
00118 };
00119 #endif // _HRESULT_H__