ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/Daodan/MSYS2/mingw32/i686-w64-mingw32/include/mspenum.h
Revision: 1166
Committed: Tue Oct 26 14:22:36 2021 UTC (4 years ago) by rossy
Content type: text/x-chdr
File size: 1720 byte(s)
Log Message:
Daodan: Replace MinGW build env with an up-to-date MSYS2 env

File Contents

# Content
1 /**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the mingw-w64 runtime package.
4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5 */
6 #ifndef _MSPENUM_H_
7 #define _MSPENUM_H_
8
9 #ifdef __cplusplus
10
11 template <class Base,const IID *piid,class T,class Copy,class ThreadModel = CComObjectThreadModel>
12 class ATL_NO_VTABLE CSafeComEnum : public CComEnumImpl<Base,piid,T,Copy>,public CComObjectRootEx< ThreadModel >
13 {
14 typedef CSafeComEnum<Base,piid,T,Copy,ThreadModel> ThisClass;
15 typedef CComEnumImpl<Base,piid,T,Copy> BaseClass;
16 STDMETHOD(Next)(ULONG celt,T *rgelt,ULONG *pceltFetched) {
17 if(IsBadWritePtr(rgelt,celt *sizeof(T))) return E_POINTER;
18 if((pceltFetched!=NULL) && IsBadWritePtr(pceltFetched,sizeof(ULONG))) return E_POINTER;
19 return BaseClass::Next(celt,rgelt,pceltFetched);
20 }
21 STDMETHOD(Clone)(Base **ppEnum) {
22 if(IsBadWritePtr(ppEnum,sizeof(Base *))) return E_POINTER;
23 return BaseClass::Clone(ppEnum);
24 }
25 BEGIN_COM_MAP(ThisClass)
26 COM_INTERFACE_ENTRY_IID(*piid,BaseClass)
27 COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal,m_pFTM)
28 END_COM_MAP()
29 DECLARE_GET_CONTROLLING_UNKNOWN()
30 HRESULT Init(T *begin,T *end,IUnknown *pUnk,CComEnumFlags flags = AtlFlagNoCopy) {
31 HRESULT hr;
32 IUnknown *pIU = GetControllingUnknown();
33 hr = CoCreateFreeThreadedMarshaler(pIU,& m_pFTM);
34 if(FAILED(hr)) return hr;
35 return BaseClass::Init(begin,end,pUnk,flags);
36 }
37 CSafeComEnum() { m_pFTM = NULL; }
38 void FinalRelease(void) {
39 if(m_pFTM) {
40 m_pFTM->Release();
41 }
42 CComObjectRootEx< ThreadModel >::FinalRelease();
43 }
44 protected:
45 IUnknown *m_pFTM;
46 };
47
48 #endif /* __cplusplus */
49
50 #endif
51