57 lines
1.5 KiB
C++
57 lines
1.5 KiB
C++
//==========================================================================;
|
|
//
|
|
// throw.h : exception handling code
|
|
// Copyright (c) Microsoft Corporation 1998.
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#pragma once
|
|
|
|
#ifndef THROW_H
|
|
#define THROW_H
|
|
|
|
class ComException {
|
|
public:
|
|
ComException(HRESULT hr) : m_hr(hr) {}
|
|
ComException(ComException &ce) : m_hr(ce.m_hr) {}
|
|
ComException& operator=(ComException &rhs) {
|
|
if (this != &rhs) {
|
|
m_hr = rhs.m_hr;
|
|
}
|
|
return *this;
|
|
}
|
|
ComException& operator=(HRESULT rhs) {
|
|
m_hr = rhs;
|
|
return *this;
|
|
}
|
|
operator HRESULT() {
|
|
return m_hr;
|
|
}
|
|
private:
|
|
HRESULT m_hr;
|
|
};
|
|
|
|
|
|
#define THROWCOM(x) throw ComException(x)
|
|
|
|
#define CATCHCOM_CLEANUP(x) catch (ComException& e) { \
|
|
{ x; } \
|
|
return e; \
|
|
}
|
|
|
|
#define CATCHCOM() CATCHCOM_CLEANUP(;)
|
|
|
|
#define CATCHALL_CLEANUP(x) CATCHCOM_CLEANUP(x) \
|
|
catch (std::bad_alloc& e) { \
|
|
{ x; } \
|
|
return E_OUTOFMEMORY; \
|
|
} catch (std::exception& e) { \
|
|
{ x; } \
|
|
return E_UNEXPECTED; \
|
|
}
|
|
|
|
#define CATCHALL() CATCHALL_CLEANUP(;)
|
|
|
|
#endif
|
|
// end of file throw.h
|