Exemple #1
0
STDMETHODIMP PyGShellBrowser::GetControlWindow(
		/* [in] */ UINT id,
		/* [out] */ HWND * phwnd)
{
	static const char *method_name = "GetControlWindow";
	PY_GATEWAY_METHOD;
	PyObject *result;
	HRESULT hr=InvokeViaPolicy(method_name, &result, "I", id);
	if (FAILED(hr)) return hr;
	// Process the Python results, and convert back to the real params
	if (!PyWinObject_AsHANDLE(result, (HANDLE *)phwnd))
		hr = MAKE_PYCOM_GATEWAY_FAILURE_CODE(method_name);
	Py_DECREF(result);
	return hr;
}
STDMETHODIMP PyGOleInPlaceSiteWindowless::OnDefWindowMessage(
		/* [in] */ UINT msg,
		/* [in] */ WPARAM wParam,
		/* [in] */ LPARAM lParam,
		/* [out] */ LRESULT __RPC_FAR * plResult)
{
	PY_GATEWAY_METHOD;
	PyObject *result;
	HRESULT hr=InvokeViaPolicy("OnDefWindowMessage", &result, "iil", msg, wParam, lParam);
	if (FAILED(hr)) return hr;
	// Process the Python results, and convert back to the real params
	if (!PyArg_Parse(result, "l" , plResult)) return PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/);
	Py_DECREF(result);
	return hr;
}
Exemple #3
0
STDMETHODIMP PyGMachineDebugManager::AddApplication(
		/* [in] */ IRemoteDebugApplication __RPC_FAR * pda,
		/* [out] */ DWORD __RPC_FAR * pdwAppCookie)
{
	PY_GATEWAY_METHOD;
	PyObject *obpda = PyCom_PyObjectFromIUnknown(pda, IID_IRemoteDebugApplication, TRUE);
	PyObject *result;
	HRESULT hr=InvokeViaPolicy("AddApplication", &result, "O", obpda);
	Py_XDECREF(obpda);
	if (FAILED(hr)) return hr;
	// Process the Python results, and convert back to the real params
	if (!PyArg_Parse(result, "i" , pdwAppCookie)) return PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/);
	Py_DECREF(result);
	return hr;
}
// @pymethod |PyIEmptyVolumeCache|Purge|
STDMETHODIMP PyGEmptyVolumeCache::Purge(
		/* [in] */ DWORDLONG dwlSpaceToFree,
		/* [in] */ IEmptyVolumeCacheCallBack * picb)
{
	PY_GATEWAY_METHOD;
	PyObject *obdwlSpaceToFree = PyLong_FromUnsignedLongLong(dwlSpaceToFree);
	if (obdwlSpaceToFree==NULL) return MAKE_PYCOM_GATEWAY_FAILURE_CODE("Purge");
	PyObject *obpicb;
	obpicb = PyCom_PyObjectFromIUnknown(picb, IID_IEmptyVolumeCacheCallBack, TRUE);
	if (!obpicb) {
		Py_DECREF(obdwlSpaceToFree);
		return MAKE_PYCOM_GATEWAY_FAILURE_CODE("Purge");
	}
	return InvokeViaPolicy("Purge", NULL, "NN", obdwlSpaceToFree, obpicb);
}
STDMETHODIMP PyGConnectionPointContainer::FindConnectionPoint(REFIID riid, IConnectionPoint **ppCP)
{
	PY_GATEWAY_METHOD;
	if (ppCP==NULL) return E_POINTER;
	*ppCP = NULL;
	PyObject *obIID = PyWinObject_FromIID(riid);
	PyObject *result;
	HRESULT hr = InvokeViaPolicy("FindConnectionPoint", &result, "O", obIID);
	Py_XDECREF(obIID);
	if (FAILED(hr)) return hr;
	if (result != Py_None && !PyCom_InterfaceFromPyObject(result, IID_IConnectionPoint, (void **)ppCP))
		hr = PyCom_SetCOMErrorFromPyException(GetIID());
	Py_XDECREF(result);
	return (hr==S_OK && *ppCP==NULL) ? CONNECT_E_NOCONNECTION : hr;
}
Exemple #6
0
STDMETHODIMP PyGShellItemArray::GetAttributes(
		/* [in] */ SIATTRIBFLAGS dwAttribFlags,
		/* [in] */ SFGAOF sfgaoMask,
		/* [out] */ SFGAOF * psfgaoAttribs)
{
	PY_GATEWAY_METHOD;
	PyObject *result;
	HRESULT hr=InvokeViaPolicy("GetAttributes", &result, "kk", dwAttribFlags, sfgaoMask);
	if (FAILED(hr)) return hr;
	*psfgaoAttribs = PyLong_AsUnsignedLongMask(result);
	hr = PyCom_SetAndLogCOMErrorFromPyException("GetAttributes", IID_IShellItemArray);
	Py_DECREF(result);
	return hr;

}
STDMETHODIMP PyGActiveScriptError::GetExceptionInfo(EXCEPINFO FAR *pexcepinfo)
{
	if (pexcepinfo==NULL) return E_POINTER;
	PY_GATEWAY_METHOD;
	PyObject *result;
	HRESULT hr = InvokeViaPolicy("GetExceptionInfo", &result, NULL);
	if (FAILED(hr))
		return hr;

	if (!PyCom_ExcepInfoFromPyObject(result, pexcepinfo))
		hr = E_FAIL;

	Py_DECREF(result);
	return hr;
}
Exemple #8
0
STDMETHODIMP PyGShellBrowser::SendControlMsg(
		/* [in] */ UINT id,
		/* [in] */ UINT uMsg,
		/* [in] */ WPARAM wParam,
		/* [in] */ LPARAM lParam,
		/* [in] */ LRESULT * pret)
{
	PY_GATEWAY_METHOD;
	PyObject *result;
	HRESULT hr=InvokeViaPolicy("SendControlMsg", &result, "iiNN", id, uMsg, PyWinObject_FromPARAM(wParam), PyWinObject_FromPARAM(lParam));
	if (PyInt_Check(result) || PyLong_Check(result))
		PyWinLong_AsULONG_PTR(result, (ULONG_PTR *)pret);
	Py_DECREF(result);
	return hr;
}
STDMETHODIMP PyGPersistFolder2::GetCurFolder(
		/* [out] */ PIDLIST_ABSOLUTE * ppidl)
{
	PY_GATEWAY_METHOD;
	PyObject *result;
	HRESULT hr=InvokeViaPolicy("GetCurFolder", &result);
	if (FAILED(hr)) return hr;
	// Process the Python results, and convert back to the real params
	if (!PyObject_AsPIDL(result, ppidl, TRUE))
		hr = MAKE_PYCOM_GATEWAY_FAILURE_CODE("GetCurFolder");
	else
		hr = *ppidl ? S_OK : S_FALSE; // this is what the docs say!
	Py_DECREF(result);
	return hr;
}
STDMETHODIMP PyGPropertyStorage::WritePropertyNames(
		/* [in] */ ULONG cpropid,
		/* [size_is][in] */ const PROPID rgpropid[],
		/* [size_is][in] */ const LPOLESTR rglpwstrName[])
{
	PY_GATEWAY_METHOD;
	{	// Scope so Tmp objects are DECREF'ed before lock released
	TmpPyObject obpropids = PyWinObject_FromPROPIDs(rgpropid, cpropid);
	if (obpropids==NULL)
		return MAKE_PYCOM_GATEWAY_FAILURE_CODE("WritePropertyNames");
	TmpPyObject obnames = PyWinObject_FromWCHARArray(rglpwstrName, cpropid);
	if (obnames==NULL)
		return MAKE_PYCOM_GATEWAY_FAILURE_CODE("WritePropertyNames");
	return InvokeViaPolicy("WritePropertyNames", NULL, "OO", obpropids, obnames);
	}
}
STDMETHODIMP PyGDocHostUIHandler::GetHostInfo(
		/* [out][in] */ DOCHOSTUIINFO * pInfo)
{
	PY_GATEWAY_METHOD;
	PyObject *result;
	HRESULT hr=InvokeViaPolicy("GetHostInfo", &result, "");
	if (FAILED(hr)) return hr;
	// Process the Python results, and convert back to the real params
	PyObject *obhostcss, *obhostns;
	if (!PyArg_ParseTuple(result, "iiOO", &pInfo->dwFlags, &pInfo->dwDoubleClick, &obhostcss, &obhostns) ||
	    !PyWinObject_AsTaskAllocatedWCHAR(obhostcss, &pInfo->pchHostCss, TRUE, NULL) ||
	    !PyWinObject_AsTaskAllocatedWCHAR(obhostns, &pInfo->pchHostNS, TRUE, NULL))
		hr = MAKE_PYCOM_GATEWAY_FAILURE_CODE("GetHostInfo");
	Py_DECREF(result);
	return hr;
}
STDMETHODIMP PyGPersistFile::GetCurFile(
		/* [out] */ LPOLESTR __RPC_FAR * ppszFileName)
{
	PY_GATEWAY_METHOD;
	PyObject *result;
	HRESULT hr=InvokeViaPolicy("GetCurFile", &result);
	if (FAILED(hr)) return hr;
	// Process the Python results, and convert back to the real params
	PyObject *obppszFileName;
	if (!PyArg_Parse(result, "O" , &obppszFileName))
		hr = PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/);
	else if (!PyWinObject_AsTaskAllocatedWCHAR(obppszFileName, ppszFileName))
		hr = PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/);
	Py_DECREF(result);
	return hr;
}
STDMETHODIMP PyGCategoryProvider::GetCategoryForSCID(
		/* [in] */ __RPC__in const SHCOLUMNID * pscid,
		/* [out] */ __RPC__out GUID * pguid)
{
	PY_GATEWAY_METHOD;
	PyObject *obpscid = PyObject_FromSHCOLUMNID(pscid);
	if (obpscid==NULL) return MAKE_PYCOM_GATEWAY_FAILURE_CODE("GetCategoryForSCID");
	PyObject *result;
	HRESULT hr=InvokeViaPolicy("GetCategoryForSCID", &result, "(O)", obpscid);
	Py_DECREF(obpscid);
	if (FAILED(hr)) return hr;
	if (!PyWinObject_AsIID(result, pguid))
		hr = MAKE_PYCOM_GATEWAY_FAILURE_CODE("GetCategoryForSCID");
	Py_DECREF(result);
	return hr;
}
STDMETHODIMP PyGTransferSource::RemoveItem(
		/* [in] */ IShellItem * psiSource,
		/* [in] */ TRANSFER_SOURCE_FLAGS flags)
{
	PY_GATEWAY_METHOD;
	PyObject *obpsiSource, *result;
	obpsiSource = PyCom_PyObjectFromIUnknown(psiSource, IID_IShellItem, TRUE);
	HRESULT hr=InvokeViaPolicy("RemoveItem", &result, "Oi", obpsiSource, flags);
	Py_XDECREF(obpsiSource);
	if (FAILED(hr))
		return hr;
	hr = PyLong_AsLong(result);
	if (hr == -1 && PyErr_Occurred())
		hr = MAKE_PYCOM_GATEWAY_FAILURE_CODE("RemoveItem");
	return hr;
}
STDMETHODIMP PyGActiveScriptSite::GetLCID( 
            /* [out] */ LCID FAR *plcid)
{
	PY_GATEWAY_METHOD;
	if ( plcid == NULL )
		return E_POINTER;

	PyObject *result;
	HRESULT hr = InvokeViaPolicy("GetLCID", &result, NULL);
	if (FAILED(hr))
		return hr;

	*plcid = PyInt_AsLong(result);
	Py_DECREF(result);
	return PyCom_HandlePythonFailureToCOM();
}
Exemple #16
0
STDMETHODIMP PyGDebugDocumentTextExternalAuthor::GetFileName(
    /* [out] */ BSTR __RPC_FAR * pbstrShortName)
{
    PY_GATEWAY_METHOD;
    PyObject *result;
    HRESULT hr=InvokeViaPolicy("GetFileName", &result);
    if (FAILED(hr)) return hr;
    // Process the Python results, and convert back to the real params
    PyObject *obpbstrShortName;
    if (!PyArg_Parse(result, "O" , &obpbstrShortName)) return PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/);
    BOOL bPythonIsHappy = TRUE;
    if (!PyCom_BstrFromPyObject(obpbstrShortName, pbstrShortName)) bPythonIsHappy = FALSE;
    if (!bPythonIsHappy) hr = PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/);
    Py_DECREF(result);
    return hr;
}
STDMETHODIMP PyGDebugDocumentInfo::GetDocumentClassId(
		/* [out] */ GUID __RPC_FAR * pclsidDocument)
{
	PY_GATEWAY_METHOD;
	PyObject *result;
	HRESULT hr=InvokeViaPolicy("GetDocumentClassId", &result);
	if (FAILED(hr)) return hr;
	// Process the Python results, and convert back to the real params
	PyObject *obpclsidDocument;
	if (!PyArg_Parse(result, "O" , &obpclsidDocument)) return PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/);
	BOOL bPythonIsHappy = TRUE;
	if (!PyWinObject_AsIID(obpclsidDocument, pclsidDocument)) bPythonIsHappy = FALSE;
	if (!bPythonIsHappy) hr = PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/);
	Py_DECREF(result);
	return hr;
}
Exemple #18
0
STDMETHODIMP PyGShellView::AddPropertySheetPages(
		/* [in] */ DWORD dwReserved,
		/* [in] */ LPFNSVADDPROPSHEETPAGE pfn,
		/* [in] */ LPARAM lparam)
{
	PY_GATEWAY_METHOD;
// *** The input argument pfn of type "LPFNSVADDPROPSHEETPAGE" was not processed ***
//   - Please ensure this conversion function exists, and is appropriate
//   - The type 'LPFNSVADDPROPSHEETPAGE' (pfn) is unknown.
	PyObject *obpfn = Py_None;
	Py_INCREF(Py_None);
	if (obpfn==NULL) return MAKE_PYCOM_GATEWAY_FAILURE_CODE("AddPropertySheetPages");
	HRESULT hr=InvokeViaPolicy("AddPropertySheetPages", NULL, "lON", dwReserved, obpfn, PyWinObject_FromPARAM(lparam));
	Py_DECREF(obpfn);
	return hr;
}
Exemple #19
0
STDMETHODIMP PyGShellBrowser::InsertMenusSB(
		/* [in] */ HMENU hmenuShared,
		/* [out][in] */ LPOLEMENUGROUPWIDTHS lpMenuWidths)
{
	static const char *method_name = "InsertMenusSB";
	PY_GATEWAY_METHOD;
	PyObject *oblpMenuWidths = PyObject_FromOLEMENUGROUPWIDTHS(lpMenuWidths);
	if (oblpMenuWidths==NULL) return MAKE_PYCOM_GATEWAY_FAILURE_CODE(method_name);
	PyObject *result;
	HRESULT hr=InvokeViaPolicy(method_name, &result, "NO", PyWinLong_FromHANDLE(hmenuShared), oblpMenuWidths);
	Py_DECREF(oblpMenuWidths);
	if (FAILED(hr)) return hr;
	PyObject_AsOLEMENUGROUPWIDTHS(result, lpMenuWidths);
	Py_DECREF(result);
	return PyCom_SetCOMErrorFromPyException(GetIID());
}
Exemple #20
0
STDMETHODIMP PyGShellView::TranslateAccelerator(
		/* [in] */ MSG * pmsg)
{
	PY_GATEWAY_METHOD;
	PyObject *obpmsg = PyObject_FromMSG(pmsg);
	if (obpmsg==NULL) return MAKE_PYCOM_GATEWAY_FAILURE_CODE("TranslateAccelerator");
	PyObject *result;
	HRESULT hr=InvokeViaPolicy("TranslateAccelerator", &result, "(O)", obpmsg);
	Py_DECREF(obpmsg);
	if (FAILED(hr)) return hr;
	// Process the Python results, and convert back to the real params
	if (PyInt_Check(result) || PyLong_Check(result))
		hr = PyInt_AsLong(result);
	Py_DECREF(result);
	return hr;
}
Exemple #21
0
STDMETHODIMP PyGEnumConnectionPoints::Next( 
            /* [in] */ ULONG celt,
            /* [length_is][size_is][out] */ IConnectionPoint **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 )
	{
		PyObject *ob = PySequence_GetItem(result, i);
		if ( ob == NULL )
			goto error;

		if ( !PyCom_InterfaceFromPyObject(ob, IID_IConnectionPoint, reinterpret_cast<void **>(&rgVar[i]), FALSE) )
		{
			Py_DECREF(result);
			return PyCom_SetCOMErrorFromPyException(IID_IEnumConnectionPoints);
		}
	}

	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_IEnumConnectionPoints);
}
Exemple #22
0
STDMETHODIMP PyGShellItem::Compare(
		/* [in] */ IShellItem * psi,
		/* [in] */ SICHINTF hint,
		/* [out] */ int * piOrder)
{
	PY_GATEWAY_METHOD;
	PyObject *obpsi;
	obpsi = PyCom_PyObjectFromIUnknown(psi, IID_IShellItem, TRUE);
	PyObject *result;
	HRESULT hr=InvokeViaPolicy("Compare", &result, "Ok", obpsi, hint);
	Py_XDECREF(obpsi);
	if (FAILED(hr)) return hr;
	*piOrder = PyInt_AsLong(result);
	hr = PyCom_SetAndLogCOMErrorFromPyException("Compare", IID_IShellItem);
	Py_DECREF(result);
	return hr;
}
Exemple #23
0
STDMETHODIMP PyGDebugDocumentText::GetPositionOfContext(
		/* [in] */ IDebugDocumentContext __RPC_FAR * psc,
		/* [out] */ ULONG __RPC_FAR * pcCharacterPosition,
		/* [out] */ ULONG __RPC_FAR * cNumChars)
{
	PY_GATEWAY_METHOD;
	PyObject *obpsc;
	obpsc = PyCom_PyObjectFromIUnknown(psc, IID_IDebugDocumentContext, TRUE);
	PyObject *result;
	HRESULT hr=InvokeViaPolicy("GetPositionOfContext", &result, "O", obpsc);
	Py_XDECREF(obpsc);
	if (FAILED(hr)) return hr;
	// Process the Python results, and convert back to the real params
	if (!PyArg_ParseTuple(result, "ii" , pcCharacterPosition, cNumChars)) return PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/);
	Py_DECREF(result);
	return hr;
}
Exemple #24
0
STDMETHODIMP PyGDebugDocumentText::GetLineOfPosition(
		/* [in] */ ULONG cCharacterPosition,
		/* [out] */ ULONG __RPC_FAR * pcLineNumber,
		/* [out] */ ULONG __RPC_FAR * pcCharacterOffsetInLine)
{
	PY_GATEWAY_METHOD;
	PyObject *result;
	HRESULT hr=InvokeViaPolicy("GetLineOfPosition", &result, "i", cCharacterPosition);
	if (FAILED(hr)) return hr;
	// Process the Python results, and convert back to the real params
	ULONG cLineNumber, cCharacterOffsetInLine;
	if (!PyArg_ParseTuple(result, "ii" , &cLineNumber, &cCharacterOffsetInLine)) return PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/);
	if (pcLineNumber) *pcLineNumber = cLineNumber;
	if (pcCharacterOffsetInLine) *pcCharacterOffsetInLine = cCharacterOffsetInLine;
	Py_DECREF(result);
	return hr;
}
// Std delegation
STDMETHODIMP PyGEnumResources::Next( 
            /* [in] */ ULONG celt,
            /* [out] */ SHELL_ITEM_RESOURCE *rgVar,
            /* [out] */ ULONG *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 )
	{
		PyObject *ob = PySequence_GetItem(result, i);
		if ( ob == NULL )
			goto error;

		if ( !PyWinObject_AsSHELL_ITEM_RESOURCE(ob, &rgVar[i]))
		{
			Py_DECREF(result);
			return PyCom_SetCOMErrorFromPyException(IID_IEnumResources);
		}
	}

	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_IEnumResources, "Next() did not return a sequence of objects");
}
Exemple #26
0
STDMETHODIMP PyGEnumIDList::Next( 
            /* [in] */ ULONG celt,
            /* [length_is][size_is][out] */ LPITEMIDLIST *pi,
            /* [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 )
	{
		PyObject *ob = PySequence_GetItem(result, i);
		if ( ob == NULL )
			goto error;

		if ( !PyObject_AsPIDL(ob, &pi[i] ))
		{
			Py_DECREF(result);
			return PyCom_SetCOMErrorFromPyException(IID_IEnumIDList);
		}
	}

	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_IEnumIDList, "Next() did not return a sequence of objects");
}
Exemple #27
0
STDMETHODIMP PyGDataObject::GetCanonicalFormatEtc(
		/* [unique][in] */ FORMATETC * pformatectIn,
		/* [out] */ FORMATETC * pformatetcOut)
{
	static const char *method_name = "GetCanonicalFormatEtc";
	PY_GATEWAY_METHOD;
	PyObject *obpformatectIn = PyObject_FromFORMATETC(pformatectIn);
	if (obpformatectIn==NULL) return MAKE_PYCOM_GATEWAY_FAILURE_CODE(method_name);
	PyObject *result;
	HRESULT hr=InvokeViaPolicy(method_name, &result, "(O)", obpformatectIn);
	Py_DECREF(obpformatectIn);
	if (FAILED(hr)) return hr;
	// Process the Python results, and convert back to the real params
	PyObject_AsFORMATETC(result, pformatetcOut);
	Py_DECREF(result);
	return hr;
}
STDMETHODIMP PyGLockBytes::Stat(
		/* [out] */ STATSTG __RPC_FAR * pstatstg,
		/* [in] */ DWORD grfStatFlag)
{
	PY_GATEWAY_METHOD;
	PyObject *result;
	HRESULT hr=InvokeViaPolicy("Stat", &result, "i", grfStatFlag);
	if (FAILED(hr)) return hr;
	// Process the Python results, and convert back to the real params
	PyObject *obpstatstg;
	if (!PyArg_Parse(result, "O" , &obpstatstg)) return PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/);
	BOOL bPythonIsHappy = TRUE;
	if (!PyCom_PyObjectAsSTATSTG(obpstatstg, pstatstg, 0/*flags*/)) bPythonIsHappy = FALSE;
	if (!bPythonIsHappy) hr = PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/);
	Py_DECREF(result);
	return hr;
}
STDMETHODIMP PyGDocHostUIHandler::FilterDataObject(
		/* [in] */ IDataObject * pDO,
		/* [out] */ IDataObject ** ppDORet)
{
	PY_GATEWAY_METHOD;
	if (ppDORet==NULL) return E_POINTER;
	PyObject *obpDO;
	obpDO = PyCom_PyObjectFromIUnknown(pDO, IID_IDataObject, TRUE);
	PyObject *result;
	HRESULT hr=InvokeViaPolicy("FilterDataObject", &result, "O", obpDO);
	Py_XDECREF(obpDO);
	if (FAILED(hr)) return hr;
	if (!PyCom_InterfaceFromPyInstanceOrObject(result, IID_IDataObject, (void **)ppDORet, TRUE /* bNoneOK */))
		hr = MAKE_PYCOM_GATEWAY_FAILURE_CODE("FilterDataObject");
	Py_DECREF(result);
	return hr;
}
Exemple #30
0
STDMETHODIMP PyGExplorerCommand::GetToolTip(
		/* [unique][in] */ IShellItemArray * psiItemArray,
		/* [string][out] */ LPWSTR * ppszInfotip)
{
	PY_GATEWAY_METHOD;
	PyObject *obpsiItemArray;
	obpsiItemArray = PyCom_PyObjectFromIUnknown(psiItemArray, IID_IShellItemArray, TRUE);
	PyObject *result;
	HRESULT hr=InvokeViaPolicy("GetToolTip", &result, "O", obpsiItemArray);
	Py_XDECREF(obpsiItemArray);
	if (FAILED(hr)) return hr;
	// Process the Python results, and convert back to the real params
	if (!PyWinObject_AsPfnAllocatedWCHAR(result, PyShell_AllocMem, ppszInfotip))
		hr = PyCom_SetAndLogCOMErrorFromPyException("GetToolTip", IID_IExplorerCommand);
	Py_DECREF(result);
	return hr;
}