view loader/dshow/iunk.h @ 175:d43c7e6412f0

added DirectShow support
author arpi_esp
date Tue, 20 Mar 2001 22:11:38 +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