| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 | /** * This module contains a definition for the IUnknown interface, used with COM. * * Copyright: Copyright (C) 2005-2006 Digital Mars, www.digitalmars.com. * All rights reserved. * License: BSD style: $(LICENSE) * Authors: Walter Bright, Sean Kelly */ module tango.sys.win32.IUnknown; private { import tango.sys.win32.Types; extern (C) extern IID IID_IUnknown; } interface IUnknown { HRESULT QueryInterface( REFIID iid, out IUnknown obj ); ULONG AddRef(); ULONG Release(); } /** * This implementation may be mixed into COM classes to avoid code duplication. */ template IUnknownImpl() { HRESULT QueryInterface( REFIID iid, out IUnknown obj ) { if ( iid == &IID_IUnknown ) { AddRef(); obj = this; return S_OK; } else { obj = null; return E_NOINTERFACE; } } ULONG AddRef() { return ++m_count; } ULONG Release() { if( --m_count == 0 ) { // free object return 0; } return m_count; } private: ULONG m_count = 1; } |