Mercurial > mplayer.hg
view loader/dshow/iunk.h @ 1090:fd0d77973d08
bugfix
author | szabii |
---|---|
date | Sun, 10 Jun 2001 23:40:20 +0000 |
parents | bdc4a8fc04d8 |
children | da26060c81ef |
line wrap: on
line source
#ifndef _iunk_h #define _iunk_h #include "interfaces.h" #include "guids.h" #define DECLARE_IUNKNOWN(CLASSNAME) \ int refcount; \ static long STDCALL QueryInterface (IUnknown * This, GUID* riid, void **ppvObject); \ static long STDCALL AddRef (IUnknown * This); \ static long STDCALL Release (IUnknown * This); #define IMPLEMENT_IUNKNOWN(CLASSNAME) \ long STDCALL CLASSNAME ::QueryInterface (IUnknown * This, GUID* riid, void **ppvObject) \ { \ Debug printf(#CLASSNAME "::QueryInterface() called\n");\ if(!ppvObject)return 0x80004003; \ CLASSNAME * me=( CLASSNAME *)This; \ int i=0; \ for(const GUID* r=me->interfaces; i<sizeof(CLASSNAME ::interfaces)/sizeof(CLASSNAME ::interfaces[0]); r++, i++) \ if(!memcmp(r, riid, 16)) \ { \ This->vt->AddRef((IUnknown*)This); \ *ppvObject=This; \ return 0; \ } \ Debug printf("Failed\n"); \ return 0x80004002; \ } \ \ long STDCALL CLASSNAME ::AddRef ( \ IUnknown * This) \ { \ Debug printf(#CLASSNAME "::AddRef() called\n"); \ CLASSNAME * me=( CLASSNAME *)This; \ return ++(me->refcount); \ } \ \ long STDCALL CLASSNAME ::Release ( \ IUnknown * This) \ { \ Debug printf(#CLASSNAME "::Release() called\n"); \ CLASSNAME* me=( CLASSNAME *)This; \ if(--(me->refcount) ==0) \ delete ( CLASSNAME *) This; \ return 0; \ } #endif