3 #if !defined(SERAPHYSCRIPTTOOLS_GENERIC_HEADER)
4 #define SERAPHYSCRIPTTOOLS_GENERIC_HEADER
11 #define ATLTRACE(mes) OutputDebugString(mes)
17 void ErrorInfo(int nMessageID);
18 SAFEARRAY* GetArrayFromVariant(VARIANT& var,VARTYPE* pVt);
20 //
\92l
\82ð
\83R
\83s
\81[
\82·
\82é
\83o
\83\8a\83A
\83\93\83g
\97ñ
\8b\93\8c^
21 typedef CComEnum<IEnumVARIANT, &IID_IEnumVARIANT, VARIANT, _Copy<VARIANT> > CComEnumVARIANT;
23 //
\93®
\93I
\82È
\83o
\83\8a\83A
\83\93\83g
\97ñ
\8b\93\8c^
25 class CComEnumDynaVARIANT :public IEnumVARIANT , public CComObjectRootEx<CComSingleThreadModel>
28 BEGIN_COM_MAP(CComEnumDynaVARIANT)
29 COM_INTERFACE_ENTRY(IEnumVARIANT)
30 COM_INTERFACE_ENTRY(IUnknown)
38 STDMETHODIMP Next(unsigned long celt, VARIANT FAR* rgvar, unsigned long FAR* pceltFetched);
39 STDMETHODIMP Skip(unsigned long celt);
41 STDMETHODIMP Clone(IEnumVARIANT FAR* FAR* ppenum);
48 ATLTRACE("CComEnumDynaVARINAT::FinalRelease\r\n");
50 void Init(T* pObj,unsigned long current)
59 unsigned long m_current;
64 STDMETHODIMP CComEnumDynaVARIANT<T>::Next(unsigned long celt, VARIANT FAR* rgvar, unsigned long FAR* pceltFetched)
66 //
\96ß
\82·
\94z
\97ñ
\82Ì
\92l
\82ð
\8f\89\8aú
\89»
72 ::VariantInit(&rgvar[i]);
74 unsigned long cnt = 0;
76 m_pObj->get_Count((long*)&mx);
77 while(cnt < celt && m_current < mx){
78 CComVariant varIdx((long)m_current);
79 m_pObj->get_Value(varIdx,&rgvar[cnt]);
84 //
\8eÀ
\8dÛ
\82É
\8f\91\82«
\96ß
\82µ
\82½
\92l
\82ð
\8f\89\8aú
\89»
\82·
\82é
88 return (celt > cnt)?S_FALSE:S_OK;
92 STDMETHODIMP CComEnumDynaVARIANT<T>::Skip(unsigned long celt)
96 m_pObj->get_Count((long*)&mx);
97 if(m_current + celt < mx){
106 STDMETHODIMP CComEnumDynaVARIANT<T>::Reset()
113 STDMETHODIMP CComEnumDynaVARIANT<T>::Clone(IEnumVARIANT FAR* FAR* ppenum)
115 CComObject< CComEnumDynaVARIANT<T> >* pClone = NULL;
116 pClone->CreateInstance(&pClone);
117 pClone->Init(m_pObj,m_current);
118 pClone->QueryInterface(IID_IEnumVARIANT,(void**)ppenum);