annotate loader/dshow/iunk.h @ 1545:da26060c81ef

big avifile sync - from now we have common code
author arpi
date Thu, 16 Aug 2001 00:50:02 +0000
parents bdc4a8fc04d8
children 213b35f84cf3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 168
diff changeset
1 #ifndef DS_IUNK_H
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 168
diff changeset
2 #define DS_IUNK_H
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 168
diff changeset
3
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
4 #include "interfaces.h"
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
5 #include "guids.h"
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 168
diff changeset
6
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
7 #define DECLARE_IUNKNOWN(CLASSNAME) \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
8 int refcount; \
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 168
diff changeset
9 static long STDCALL QueryInterface(IUnknown * This, GUID* riid, void **ppvObject); \
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
10 static long STDCALL AddRef (IUnknown * This); \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
11 static long STDCALL Release (IUnknown * This);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
12
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
13 #define IMPLEMENT_IUNKNOWN(CLASSNAME) \
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 168
diff changeset
14 long STDCALL CLASSNAME ::QueryInterface(IUnknown * This, GUID* riid, void **ppvObject) \
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
15 { \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
16 Debug printf(#CLASSNAME "::QueryInterface() called\n");\
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 168
diff changeset
17 if (!ppvObject) return 0x80004003; \
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 168
diff changeset
18 CLASSNAME * me = (CLASSNAME *)This; \
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 168
diff changeset
19 unsigned int i = 0; \
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
20 for(const GUID* r=me->interfaces; i<sizeof(CLASSNAME ::interfaces)/sizeof(CLASSNAME ::interfaces[0]); r++, i++) \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
21 if(!memcmp(r, riid, 16)) \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
22 { \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
23 This->vt->AddRef((IUnknown*)This); \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
24 *ppvObject=This; \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
25 return 0; \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
26 } \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
27 Debug printf("Failed\n"); \
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 168
diff changeset
28 return E_NOINTERFACE; \
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
29 } \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
30 \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
31 long STDCALL CLASSNAME ::AddRef ( \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
32 IUnknown * This) \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
33 { \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
34 Debug printf(#CLASSNAME "::AddRef() called\n"); \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
35 CLASSNAME * me=( CLASSNAME *)This; \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
36 return ++(me->refcount); \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
37 } \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
38 \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
39 long STDCALL CLASSNAME ::Release ( \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
40 IUnknown * This) \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
41 { \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
42 Debug printf(#CLASSNAME "::Release() called\n"); \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
43 CLASSNAME* me=( CLASSNAME *)This; \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
44 if(--(me->refcount) ==0) \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
45 delete ( CLASSNAME *) This; \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
46 return 0; \
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
47 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
48
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 168
diff changeset
49 #endif /* DS_IUNK_H */