Пример #1
0
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;
}
Пример #2
0
// ---------------------------------------------------
//
// 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");
}