STDMETHODIMP PyGPropertyStorage::Stat( /* [out] */ STATPROPSETSTG * pstatpsstg) { PY_GATEWAY_METHOD; PyObject *result; HRESULT hr=InvokeViaPolicy("Stat", &result); if (FAILED(hr)) return hr; if (!PyCom_PyObjectAsSTATPROPSETSTG(result, pstatpsstg)) hr = MAKE_PYCOM_GATEWAY_FAILURE_CODE("Stat"); Py_DECREF(result); return hr; }
// --------------------------------------------------- // // Gateway Implementation STDMETHODIMP PyGEnumSTATPROPSETSTG::Next( /* [in] */ ULONG celt, /* [length_is][size_is][out] */ STATPROPSETSTG __RPC_FAR *rgVar, /* [out] */ ULONG __RPC_FAR *pCeltFetched) { PY_GATEWAY_METHOD; PyObject *result; HRESULT hr = InvokeViaPolicy("Next", &result, "i", celt); if ( FAILED(hr) ) return hr; if ( !PySequence_Check(result) ) goto error; int len; len = PyObject_Length(result); if ( len == -1 ) goto error; if ( len > (int)celt) len = celt; if ( pCeltFetched ) *pCeltFetched = len; int i; for ( i = 0; i < len; ++i ) { TmpPyObject ob = PySequence_GetItem(result, i); if ( ob == NULL ) goto error; if ( !PyCom_PyObjectAsSTATPROPSETSTG(ob, &rgVar[i]) ) { Py_DECREF(result); return PyCom_SetCOMErrorFromPyException(IID_IEnumSTATPROPSETSTG); } } Py_DECREF(result); return len < (int)celt ? S_FALSE : S_OK; error: PyErr_Clear(); // just in case Py_DECREF(result); return PyCom_SetCOMErrorFromSimple(E_FAIL, IID_IEnumSTATPROPSETSTG, "Next() did not return a sequence of objects"); }