windows-nt/Source/XPSP1/NT/multimedia/dshow/vidctl/throw.h
2020-09-26 16:20:57 +08:00

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