Mercurial > games > semicongine
comparison fuhtark_test/include/winapi/mspenum.h @ 1500:91c8c3b7cbf0
add: futhark tests for generating vulkan api
| author | sam <sam@basx.dev> |
|---|---|
| date | Wed, 26 Nov 2025 21:36:48 +0700 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1499:1f58458b7ef7 | 1500:91c8c3b7cbf0 |
|---|---|
| 1 #ifndef _MSPENUM_H_ | |
| 2 #define _MSPENUM_H_ | |
| 3 | |
| 4 #ifdef __cplusplus | |
| 5 | |
| 6 template <class Base,const IID *piid,class T,class Copy,class ThreadModel = CComObjectThreadModel> | |
| 7 class ATL_NO_VTABLE CSafeComEnum : public CComEnumImpl<Base,piid,T,Copy>,public CComObjectRootEx< ThreadModel > | |
| 8 { | |
| 9 typedef CSafeComEnum<Base,piid,T,Copy,ThreadModel> ThisClass; | |
| 10 typedef CComEnumImpl<Base,piid,T,Copy> BaseClass; | |
| 11 STDMETHOD(Next)(ULONG celt,T *rgelt,ULONG *pceltFetched) { | |
| 12 if(IsBadWritePtr(rgelt,celt *sizeof(T))) return E_POINTER; | |
| 13 if((pceltFetched!=NULL) && IsBadWritePtr(pceltFetched,sizeof(ULONG))) return E_POINTER; | |
| 14 return BaseClass::Next(celt,rgelt,pceltFetched); | |
| 15 } | |
| 16 STDMETHOD(Clone)(Base **ppEnum) { | |
| 17 if(IsBadWritePtr(ppEnum,sizeof(Base *))) return E_POINTER; | |
| 18 return BaseClass::Clone(ppEnum); | |
| 19 } | |
| 20 BEGIN_COM_MAP(ThisClass) | |
| 21 COM_INTERFACE_ENTRY_IID(*piid,BaseClass) | |
| 22 COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal,m_pFTM) | |
| 23 END_COM_MAP() | |
| 24 DECLARE_GET_CONTROLLING_UNKNOWN() | |
| 25 HRESULT Init(T *begin,T *end,IUnknown *pUnk,CComEnumFlags flags = AtlFlagNoCopy) { | |
| 26 HRESULT hr; | |
| 27 IUnknown *pIU = GetControllingUnknown(); | |
| 28 hr = CoCreateFreeThreadedMarshaler(pIU,& m_pFTM); | |
| 29 if(FAILED(hr)) return hr; | |
| 30 return BaseClass::Init(begin,end,pUnk,flags); | |
| 31 } | |
| 32 CSafeComEnum() { m_pFTM = NULL; } | |
| 33 void FinalRelease(void) { | |
| 34 if(m_pFTM) { | |
| 35 m_pFTM->Release(); | |
| 36 } | |
| 37 CComObjectRootEx< ThreadModel >::FinalRelease(); | |
| 38 } | |
| 39 protected: | |
| 40 IUnknown *m_pFTM; | |
| 41 }; | |
| 42 | |
| 43 #endif /* __cplusplus */ | |
| 44 | |
| 45 #endif | |
| 46 |
