windows-nt/Source/XPSP1/NT/base/fs/hsm/gui/rsoptcom/rsopt.h
2020-09-26 16:20:57 +08:00

73 lines
2.8 KiB
C++

/*++
© 1998 Seagate Software, Inc. All rights reserved.
Module Name:
RsOpt.h
Abstract:
Special error handling macros for RsOptCom and RsCln.
Author:
Carl Hagerstrom [carlh] 20-Aug-1998
Revision History:
--*/
#ifndef _RSOPT_H
#define _RSOPT_H
#define RsOptThrow(hr) throw ((HRESULT)hr)
#define RsOptLastError (HRESULT_FROM_WIN32(GetLastError()))
#define RsOptAffirm(cond,hr) if (!(cond)) RsOptThrow(hr)
#define RsOptAffirmStatus(stat) RsOptAffirm(stat, RsOptLastError)
#define RsOptAffirmPointer(ptr) RsOptAffirm(ptr, E_POINTER)
#define RsOptAffirmAlloc(ptr) RsOptAffirm(ptr, E_OUTOFMEMORY)
#define RsOptAffirmHr(hr) \
{ \
HRESULT lHr; \
lHr = (hr); \
RsOptAffirm(SUCCEEDED(lHr), lHr); \
}
#define RsOptAffirmHandle(hndl) \
{ \
HANDLE _hndl; \
_hndl = (hndl); \
RsOptAffirm(_hndl && _hndl != INVALID_HANDLE_VALUE, RsOptLastError); \
}
#define RsOptAffirmNtStatus(ntstat) \
{ \
NTSTATUS _ntstat; \
_ntstat = (ntstat); \
RsOptAffirm(NT_SUCCESS(_ntstat), HRESULT_FROM_NT(_ntstat)); \
}
#define RsOptAffirmDw(hr) \
{ \
HRESULT _hr; \
_hr = (hr); \
RsOptAffirm(SUCCEEDED(_hr), _hr); \
}
#define RsOptAffirmWin32(stat) \
{ \
LONG _stat; \
_stat = (stat); \
RsOptAffirm(_stat == ERROR_SUCCESS, HRESULT_FROM_WIN32(_stat)); \
}
#define RsOptCatch(retval) \
catch(HRESULT _retval) \
{ \
retval = _retval; \
}
#endif // _RSOPT_H