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  

winstl_error_scope.h

Go to the documentation of this file.
00001 /* 
00002  * File:        winstl_error_scope.h (formerly MWTErrScp.h, ::SynesisWin)
00003  *
00004  * Purpose:     Win32 LastError scoping class.
00005  *
00006  * Created:     27th November 1998
00007  * Updated:     11th September 2004
00008  *
00009  * Home:        http://stlsoft.org/
00010  *
00011  * Copyright (c) 1998-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 WINSTL_INCL_H_WINSTL_ERROR_SCOPE
00046 #define WINSTL_INCL_H_WINSTL_ERROR_SCOPE
00047 
00048 #ifndef __STLSOFT_DOCUMENTATION_SKIP_SECTION
00049 # define WINSTL_VER_H_WINSTL_ERROR_SCOPE_MAJOR      2
00050 # define WINSTL_VER_H_WINSTL_ERROR_SCOPE_MINOR      0
00051 # define WINSTL_VER_H_WINSTL_ERROR_SCOPE_REVISION   1
00052 # define WINSTL_VER_H_WINSTL_ERROR_SCOPE_EDIT       27
00053 #endif /* !__STLSOFT_DOCUMENTATION_SKIP_SECTION */
00054 
00055 /* 
00056  * Includes
00057  */
00058 
00059 #ifndef WINSTL_INCL_H_WINSTL
00060 # include "winstl.h"                // Include the WinSTL root header
00061 #endif /* !WINSTL_INCL_H_WINSTL */
00062 
00063 /* 
00064  * Namespace
00065  */
00066 
00067 #ifndef _WINSTL_NO_NAMESPACE
00068 # if defined(_STLSOFT_NO_NAMESPACE) || \
00069      defined(__STLSOFT_DOCUMENTATION_SKIP_SECTION)
00070 /* There is no stlsoft namespace, so must define ::winstl */
00071 namespace winstl
00072 {
00073 # else
00074 /* Define stlsoft::winstl_project */
00075 
00076 namespace stlsoft
00077 {
00078 
00079 namespace winstl_project
00080 {
00081 
00082 # endif /* _STLSOFT_NO_NAMESPACE */
00083 #endif /* !_WINSTL_NO_NAMESPACE */
00084 
00085 /* 
00086 
00089 
00093 
00098 
00099 /* 
00100  * Classes
00101  */
00102 
00106 class last_error_scope
00107 {
00108 public:
00109     typedef last_error_scope    class_type;
00110 
00113 public:
00114     last_error_scope() stlsoft_throw_0()
00115         : m_dwErr(::GetLastError())
00116     {}
00117     ss_explicit_k last_error_scope(ws_dword_t dwErr) stlsoft_throw_0()
00118         : m_dwErr(::GetLastError())
00119     {
00120         ::SetLastError(dwErr);
00121     }
00122     ~last_error_scope() stlsoft_throw_0()
00123     {
00124         ::SetLastError(m_dwErr);
00125     }
00126 
00128 
00131 public:
00132     operator ws_dword_t () const
00133     {
00134         return m_dwErr;
00135     }
00136 
00138 
00139 // Members
00140 private:
00141     ws_dword_t  m_dwErr;
00142 
00143 // Not to be implemented
00144 private:
00145     last_error_scope(last_error_scope const &);
00146     last_error_scope &operator =(last_error_scope const &);
00147 };
00148 
00149 /* 
00150 
00152 
00153 /* 
00154 
00155 #ifndef _WINSTL_NO_NAMESPACE
00156 # if defined(_STLSOFT_NO_NAMESPACE) || \
00157      defined(__STLSOFT_DOCUMENTATION_SKIP_SECTION)
00158 } // namespace winstl
00159 # else
00160 } // namespace winstl_project
00161 } // namespace stlsoft
00162 # endif /* _STLSOFT_NO_NAMESPACE */
00163 #endif /* !_WINSTL_NO_NAMESPACE */
00164 
00165 /* 
00166 
00167 #endif /* WINSTL_INCL_H_WINSTL_ERROR_SCOPE */
00168 
00169 /* 

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