STLSoft - ... Robust, Lightweight, Cross-platform, Template Software ... ATLSTL - Template Software for the Active Template Library COMSTL - The Standard Template Library meets the Component Object Model .netSTL - Standard Template Library meets the Microsoft.NET Common Language Runtime InetSTL - The Standard Template Library meets WinInet MFCSTL - Template Software for the Microsoft Foundation Classes UNIXSTL - Template Software for the UNIX Operating System WinSTL - where the Standard Template Library meets the Win32 API

Main Page   Modules   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

comstl_errorinfo_functions.h

Go to the documentation of this file.
00001 /* 
00002  * File:        comstl_errorinfo_functions.h
00003  *
00004  * Purpose:     Error info functions.
00005  *
00006  * Created:
00007  * Updated:     11th September 2004
00008  *
00009  * Home:        http://stlsoft.org/
00010  *
00011  * Copyright (c) 2002-2004, Matthew Wilson and Synesis Software
00012  * All rights reserved.
00013  *
00014  * Redistribution and use in source and binary forms, with or without
00015  * modification, are permitted provided that the following conditions are met:
00016  *
00017  * - Redistributions of source code must retain the above copyright notice, this
00018  *   list of conditions and the following disclaimer.
00019  * - Redistributions in binary form must reproduce the above copyright notice,
00020  *   this list of conditions and the following disclaimer in the documentation
00021  *   and/or other materials provided with the distribution.
00022  * - Neither the name(s) of Matthew Wilson and Synesis Software nor the names of
00023  *   any contributors may be used to endorse or promote products derived from
00024  *   this software without specific prior written permission.
00025  *
00026  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00027  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00028  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00029  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
00030  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00031  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00032  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00033  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00034  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00035  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00036  * POSSIBILITY OF SUCH DAMAGE.
00037  *
00038  * 
00039 
00040 
00044 
00045 #ifndef COMSTL_INCL_H_COMSTL_ERRORINFO_FUNCTIONS
00046 #define COMSTL_INCL_H_COMSTL_ERRORINFO_FUNCTIONS
00047 
00048 #ifndef __STLSOFT_DOCUMENTATION_SKIP_SECTION
00049 # define COMSTL_VER_H_COMSTL_ERRORINFO_FUNCTIONS_MAJOR      2
00050 # define COMSTL_VER_H_COMSTL_ERRORINFO_FUNCTIONS_MINOR      0
00051 # define COMSTL_VER_H_COMSTL_ERRORINFO_FUNCTIONS_REVISION   1
00052 # define COMSTL_VER_H_COMSTL_ERRORINFO_FUNCTIONS_EDIT       11
00053 #endif /* !__STLSOFT_DOCUMENTATION_SKIP_SECTION */
00054 
00055 /* 
00056  * Includes
00057  */
00058 
00059 #ifndef COMSTL_INCL_H_COMSTL
00060 # include "comstl.h"    // Include the COMSTL root header
00061 #endif /* !COMSTL_INCL_H_COMSTL */
00062 #ifdef STLSOFT_UNITTEST
00063 # include <wchar.h>
00064 #endif /* STLSOFT_UNITTEST */
00065 
00066 /* 
00067  * Namespace
00068  *
00069  * The COMSTL components are contained within the comstl namespace. This is
00070  * actually an alias for stlsoft::comstl_project,
00071  *
00072  * The definition matrix is as follows:
00073  *
00074  * _STLSOFT_NO_NAMESPACE    _COMSTL_NO_NAMESPACE    comstl definition
00075  * ---------------------    --------------------    -----------------
00076  *  not defined              not defined             = stlsoft::comstl_project
00077  *  not defined              defined                 not defined
00078  *  defined                  not defined             comstl
00079  *  defined                  defined                 not defined
00080  *
00081  */
00082 
00083 #ifndef _COMSTL_NO_NAMESPACE
00084 # if defined(_STLSOFT_NO_NAMESPACE) || \
00085      defined(__STLSOFT_DOCUMENTATION_SKIP_SECTION)
00086 /* There is no stlsoft namespace, so must define ::comstl */
00087 namespace comstl
00088 {
00089 # else
00090 /* Define stlsoft::comstl_project */
00091 
00092 namespace stlsoft
00093 {
00094 
00095 namespace comstl_project
00096 {
00097 
00098 # endif /* _STLSOFT_NO_NAMESPACE */
00099 #endif /* !_COMSTL_NO_NAMESPACE */
00100 
00101 /* 
00102 
00107 
00108 /* 
00109  * Functions
00110  */
00111 
00112 inline HRESULT set_error_info(LPCOLESTR desc)
00113 {
00114     ICreateErrorInfo    *pCEI;
00115     HRESULT             hr = ::CreateErrorInfo(&pCEI);
00116 
00117     if(SUCCEEDED(hr))
00118     {
00119         IErrorInfo  *pEI;
00120 
00121         // Ask for IErrorInfo
00122         hr = pCEI->QueryInterface(IID_IErrorInfo, (void**)&pEI);
00123 
00124         if(SUCCEEDED(hr))
00125         {
00126             hr = pCEI->SetDescription(const_cast<LPOLESTR>(desc));
00127 
00128             ::SetErrorInfo(0, pEI);
00129 
00130             pEI->Release();
00131         }
00132 
00133         pCEI->Release();
00134     }
00135 
00136     return hr;
00137 }
00138 
00140 // Unit-testing
00141 
00142 #ifdef STLSOFT_UNITTEST
00143 
00144 namespace unittest
00145 {
00146     ss_bool_t test_comstl_errorinfo_functions(unittest_reporter *r)
00147     {
00148         using stlsoft::unittest::unittest_initialiser;
00149 
00150         ss_bool_t               bSuccess    =   true;
00151 
00152         unittest_initialiser    init(r, "COMSTL", "errorinfo_functions", __FILE__);
00153 
00154         set_error_info(L"Test info #1");
00155 
00156         IErrorInfo  *pei;
00157         HRESULT     hr  =   ::GetErrorInfo(0, &pei);
00158 
00159         if(SUCCEEDED(hr))
00160         {
00161             BSTR    bstrDesc;
00162 
00163             hr = pei->GetDescription(&bstrDesc);
00164 
00165             if(SUCCEEDED(hr))
00166             {
00167                 if(0 != wcscmp(bstrDesc, L"Test info #1"))
00168                 {
00169                     r->report("Error information not as expected ", __LINE__);
00170                     bSuccess = false;
00171                 }
00172 
00173                 ::SysFreeString(bstrDesc);
00174             }
00175 
00176             pei->Release();
00177         }
00178 
00179         return bSuccess;
00180     }
00181 
00182     unittest_registrar    unittest_comstl_errorinfo_functions(test_comstl_errorinfo_functions);
00183 
00184 } // namespace unittest
00185 
00186 #endif /* STLSOFT_UNITTEST */
00187 
00188 /* 
00189 
00191 
00192 /* 
00193 
00194 #ifndef _COMSTL_NO_NAMESPACE
00195 # if defined(_STLSOFT_NO_NAMESPACE) || \
00196      defined(__STLSOFT_DOCUMENTATION_SKIP_SECTION)
00197 } // namespace comstl
00198 # else
00199 } // namespace comstl_project
00200 } // namespace stlsoft
00201 # endif /* _STLSOFT_NO_NAMESPACE */
00202 #endif /* !_COMSTL_NO_NAMESPACE */
00203 
00204 /* 
00205 
00206 #endif /* !COMSTL_INCL_H_COMSTL_ERRORINFO_FUNCTIONS */
00207 
00208 /* 

STLSoft Libraries documentation © Synesis Software Pty Ltd, 2001-2004