1 typedef interface IIterator IIterator; 2 typedef interface IIterable IIterable; 3 4 /* IIterator */ 5 typedef struct IIteratorVtbl { 6 BEGIN_INTERFACE 7 8 /*** IUnknown methods ***/ 9 HRESULT (STDMETHODCALLTYPE *QueryInterface)( 10 IIterator *This, 11 REFIID riid, 12 void **ppvObject); 13 14 ULONG (STDMETHODCALLTYPE *AddRef)( 15 IIterator *This); 16 17 ULONG (STDMETHODCALLTYPE *Release)( 18 IIterator *This); 19 20 /*** IInspectable methods ***/ 21 HRESULT (STDMETHODCALLTYPE *GetIids)( 22 IIterator *This, 23 UINT32 *count, 24 IID **ids); 25 26 HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)( 27 IIterator *This, 28 HSTRING *className); 29 30 HRESULT (STDMETHODCALLTYPE *GetTrustLevel)( 31 IIterator *This, 32 TrustLevel *trustLevel); 33 34 /*** IIterator methods ***/ 35 HRESULT (STDMETHODCALLTYPE *get_Current)( 36 IIterator *This, 37 IUnknown **current); 38 39 HRESULT (STDMETHODCALLTYPE *get_HasCurrent)( 40 IIterator *This, 41 CHAR *hasCurrent); 42 43 HRESULT (STDMETHODCALLTYPE *MoveNext)( 44 IIterator *This, 45 CHAR *hasCurrent); 46 47 HRESULT (STDMETHODCALLTYPE *GetMany)( 48 IIterator *This, 49 UINT capacity, 50 void *value, 51 UINT *actual); 52 53 END_INTERFACE 54 } IIteratorVtbl; 55 56 interface IIterator { 57 CONST_VTBL IIteratorVtbl* lpVtbl; 58 }; 59 60 /*** IUnknown methods ***/ 61 #define IIterator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) 62 #define IIterator_AddRef(This) (This)->lpVtbl->AddRef(This) 63 #define IIterator_Release(This) (This)->lpVtbl->Release(This) 64 /*** IInspectable methods ***/ 65 #define IIterator_GetIids(This,count,ids) (This)->lpVtbl->GetIids(This,count,ids) 66 #define IIterator_GetRuntimeClassName(This,name) (This)->lpVtbl->GetRuntimeClassName(This,name) 67 #define IIterator_GetTrustLevel(This,level) (This)->lpVtbl->GetTrustLevel(This,level) 68 /*** IIterator methods ***/ 69 #define IIterator_get_Current(This,current) (This)->lpVtbl->get_Current(This,current) 70 #define IIterator_get_HasCurrent(This,hasCurrent) (This)->lpVtbl->get_HasCurrent(This,hasCurrent) 71 #define IIterator_MoveNext(This,hasCurrent) (This)->lpVtbl->MoveNext(This,hasCurrent) 72 #define IIterator_GetMany(This,capacity,value,actual) (This)->lpVtbl->GetMany(This,capacity,value,actual) 73 74 /* IIterable */ 75 typedef struct IIterableVtbl { 76 BEGIN_INTERFACE 77 78 /*** IUnknown methods ***/ 79 HRESULT (STDMETHODCALLTYPE *QueryInterface)( 80 IIterable *This, 81 REFIID riid, 82 void **ppvObject); 83 84 ULONG (STDMETHODCALLTYPE *AddRef)( 85 IIterable *This); 86 87 ULONG (STDMETHODCALLTYPE *Release)( 88 IIterable *This); 89 90 /*** IInspectable methods ***/ 91 HRESULT (STDMETHODCALLTYPE *GetIids)( 92 IIterable *This, 93 UINT32 *count, 94 IID **ids); 95 96 HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)( 97 IIterable *This, 98 HSTRING *className); 99 100 HRESULT (STDMETHODCALLTYPE *GetTrustLevel)( 101 IIterable *This, 102 TrustLevel *trustLevel); 103 104 /*** IIterable methods ***/ 105 HRESULT (STDMETHODCALLTYPE *First)( 106 IIterable *This, 107 IIterator **first); 108 109 END_INTERFACE 110 } IIterableVtbl; 111 112 interface IIterable { 113 CONST_VTBL IIterableVtbl* lpVtbl; 114 }; 115 116 /*** IUnknown methods ***/ 117 #define IIterable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) 118 #define IIterable_AddRef(This) (This)->lpVtbl->AddRef(This) 119 #define IIterable_Release(This) (This)->lpVtbl->Release(This) 120 /*** IInspectable methods ***/ 121 #define IIterable_GetIids(This,count,ids) (This)->lpVtbl->GetIids(This,count,ids) 122 #define IIterable_GetRuntimeClassName(This,name) (This)->lpVtbl->GetRuntimeClassName(This,name) 123 #define IIterable_GetTrustLevel(This,level) (This)->lpVtbl->GetTrustLevel(This,level) 124 /*** IIterable methods ***/ 125 #define IIterable_First(This,retval) (This)->lpVtbl->First(This,retval) 126