3D-Eye-Tracker/external/DirectShowFrameGrabber/AutoComPtr.h
2016-10-07 13:31:30 +09:00

60 lines
1009 B
C++

/** dirt-cheap replacement for CComPtr, which is not included in the free windows compilers */
template< class I >
class AutoComPtr
{
public:
AutoComPtr()
: p( 0 )
{}
AutoComPtr( const AutoComPtr< I >& o )
: p( o.p )
{
if ( p )
p->AddRef();
}
AutoComPtr( I* _p )
: p( _p )
{}
~AutoComPtr()
{
if ( p )
p->Release();
}
void Release()
{
if ( p )
p->Release();
p = 0;
}
I* operator->()
{ return p; }
operator I*()
{ return p; }
AutoComPtr< I >& operator=( const AutoComPtr< I >& o )
{
Release();
p = o.p;
if ( p )
p->AddRef();
return *this;
}
template< class O >
HRESULT QueryInterface( AutoComPtr< O >& o )
{ return p->QueryInterface( __uuidof( O ), reinterpret_cast< void** >( &o.p ) ); }
HRESULT CoCreateInstance( REFCLSID rclsid, LPUNKNOWN pUnkOuter = 0, DWORD dwClsContext = CLSCTX_INPROC_SERVER )
{ return ::CoCreateInstance( rclsid, pUnkOuter, dwClsContext, __uuidof( I ), reinterpret_cast< void** >( &p ) ); }
I* p;
};