[pywin32-checkins] pywin32/com/win32comext/shell/src PyIShellFolder.cpp,1.3,1.4
OLD project page for the Python extensions for Windows
Brought to you by:
mhammond
From: <mha...@us...> - 2003-11-24 09:23:50
|
Update of /cvsroot/pywin32/pywin32/com/win32comext/shell/src In directory sc8-pr-cvs1:/tmp/cvs-serv10253 Modified Files: PyIShellFolder.cpp Log Message: Lots of bug fixes. Index: PyIShellFolder.cpp =================================================================== RCS file: /cvsroot/pywin32/pywin32/com/win32comext/shell/src/PyIShellFolder.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** PyIShellFolder.cpp 2 Nov 2003 09:58:32 -0000 1.3 --- PyIShellFolder.cpp 24 Nov 2003 09:23:47 -0000 1.4 *************** *** 5,8 **** --- 5,10 ---- #include "PyIShellFolder.h" + extern void *PyShell_AllocMem(ULONG cb); + // @doc - This file contains autoduck documentation // --------------------------------------------------- *************** *** 279,295 **** // @pyparm <o PyIID>|riid||Description for riid // @pyparm int|rgfInOut||Description for rgfInOut PyObject *obpidl; PyObject *obriid; HWND hwndOwner; UINT cidl; LPCITEMIDLIST *pidl; ! IID riid; UINT rgfInOut; void * out; ! if ( !PyArg_ParseTuple(args, "lOOl:GetUIObjectOf", &hwndOwner, &obpidl, &obriid, &rgfInOut) ) return NULL; BOOL bPythonIsHappy = TRUE; if (bPythonIsHappy && !PyObject_AsPIDLArray(obpidl, &cidl, &pidl)) bPythonIsHappy = FALSE; if (!PyWinObject_AsIID(obriid, &riid)) bPythonIsHappy = FALSE; if (!bPythonIsHappy) return NULL; HRESULT hr; --- 281,303 ---- // @pyparm <o PyIID>|riid||Description for riid // @pyparm int|rgfInOut||Description for rgfInOut + // @pyparm <o PyIID>|iidout|None|The IID to wrap the result in. If not specified, riid is used. PyObject *obpidl; PyObject *obriid; + PyObject *obiidout = NULL; HWND hwndOwner; UINT cidl; LPCITEMIDLIST *pidl; ! IID riid, iidout; UINT rgfInOut; void * out; ! if ( !PyArg_ParseTuple(args, "lOOl|O:GetUIObjectOf", &hwndOwner, &obpidl, &obriid, &rgfInOut, &obiidout) ) return NULL; BOOL bPythonIsHappy = TRUE; if (bPythonIsHappy && !PyObject_AsPIDLArray(obpidl, &cidl, &pidl)) bPythonIsHappy = FALSE; if (!PyWinObject_AsIID(obriid, &riid)) bPythonIsHappy = FALSE; + if (obiidout==NULL) + iidout = riid; + else + if (!PyWinObject_AsIID(obiidout, &iidout)) bPythonIsHappy = FALSE; if (!bPythonIsHappy) return NULL; HRESULT hr; *************** *** 304,308 **** PyObject *obout; ! obout = PyCom_PyObjectFromIUnknown((IUnknown *)out, riid, FALSE); PyObject *pyretval = Py_BuildValue("lO", rgfInOut, obout); Py_XDECREF(obout); --- 312,316 ---- PyObject *obout; ! obout = PyCom_PyObjectFromIUnknown((IUnknown *)out, iidout, FALSE); PyObject *pyretval = Py_BuildValue("lO", rgfInOut, obout); Py_XDECREF(obout); *************** *** 424,431 **** // Process the Python results, and convert back to the real params PyObject *obppidl; ! if (!PyArg_ParseTuple(result, "lOl" , pchEaten, &obppidl, pdwAttributes)) return PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/); BOOL bPythonIsHappy = TRUE; if (bPythonIsHappy && !PyObject_AsPIDL(obppidl, ppidl)) bPythonIsHappy = FALSE; ! if (!bPythonIsHappy) hr = PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/); Py_DECREF(result); return hr; --- 432,443 ---- // Process the Python results, and convert back to the real params PyObject *obppidl; ! ULONG chEaten, dwAttributes; ! if (!PyArg_ParseTuple(result, "lOl" , &chEaten, &obppidl, &dwAttributes)) ! return PyCom_SetAndLogCOMErrorFromPyException("ParseDisplayName", IID_IShellFolder); BOOL bPythonIsHappy = TRUE; if (bPythonIsHappy && !PyObject_AsPIDL(obppidl, ppidl)) bPythonIsHappy = FALSE; ! if (!bPythonIsHappy) hr = PyCom_SetAndLogCOMErrorFromPyException("ParseDisplayName", IID_IShellFolder); ! if (pchEaten) *pchEaten = chEaten; ! if (pdwAttributes) *pdwAttributes = dwAttributes; Py_DECREF(result); return hr; *************** *** 442,451 **** if (FAILED(hr)) return hr; // Process the Python results, and convert back to the real params ! PyObject *obppeidl; ! if (!PyArg_Parse(result, "O" , &obppeidl)) return PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/); ! BOOL bPythonIsHappy = TRUE; ! if (bPythonIsHappy && !PyCom_InterfaceFromPyInstanceOrObject(obppeidl, IID_IEnumIDList, (void **)&ppeidl, FALSE /* bNoneOK */)) ! bPythonIsHappy = FALSE; ! if (!bPythonIsHappy) hr = PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/); Py_DECREF(result); return hr; --- 454,459 ---- if (FAILED(hr)) return hr; // Process the Python results, and convert back to the real params ! PyCom_InterfaceFromPyInstanceOrObject(result, IID_IEnumIDList, (void **)ppeidl, FALSE /* bNoneOK */); ! hr = PyCom_SetAndLogCOMErrorFromPyException("EnumObjects", IID_IShellFolder); Py_DECREF(result); return hr; *************** *** 458,461 **** --- 466,470 ---- /* [out] */ void ** out) { + static const char *szMethodName = "BindToObject"; PY_GATEWAY_METHOD; PyObject *obpidl; *************** *** 466,470 **** obriid = PyWinObject_FromIID(riid); PyObject *result; ! HRESULT hr=InvokeViaPolicy("BindToObject", &result, "OOO", obpidl, obpbcReserved, obriid); Py_XDECREF(obpidl); Py_XDECREF(obpbcReserved); --- 475,479 ---- obriid = PyWinObject_FromIID(riid); PyObject *result; ! HRESULT hr=InvokeViaPolicy(szMethodName, &result, "OOO", obpidl, obpbcReserved, obriid); Py_XDECREF(obpidl); Py_XDECREF(obpbcReserved); *************** *** 472,481 **** if (FAILED(hr)) return hr; // Process the Python results, and convert back to the real params ! PyObject *obout; ! if (!PyArg_Parse(result, "O" , &obout)) return PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/); ! BOOL bPythonIsHappy = TRUE; ! if (bPythonIsHappy && !PyCom_InterfaceFromPyInstanceOrObject(obout, IID_IUnknown, (void **)&out, FALSE /* bNoneOK */)) ! bPythonIsHappy = FALSE; ! if (!bPythonIsHappy) hr = PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/); Py_DECREF(result); return hr; --- 481,486 ---- if (FAILED(hr)) return hr; // Process the Python results, and convert back to the real params ! PyCom_InterfaceFromPyInstanceOrObject(result, riid, out, FALSE /* bNoneOK */); ! hr = PyCom_SetAndLogCOMErrorFromPyException(szMethodName, IID_IShellFolder); Py_DECREF(result); return hr; *************** *** 488,491 **** --- 493,497 ---- /* [out] */ void **ppRet) { + static const char *szMethodName = "BindToStorage"; PY_GATEWAY_METHOD; PyObject *obpidl; *************** *** 496,500 **** obriid = PyWinObject_FromIID(riid); PyObject *result; ! HRESULT hr=InvokeViaPolicy("BindToStorage", &result, "OOO", obpidl, obpbcReserved, obriid); Py_XDECREF(obpidl); Py_XDECREF(obpbcReserved); --- 502,506 ---- obriid = PyWinObject_FromIID(riid); PyObject *result; ! HRESULT hr=InvokeViaPolicy(szMethodName, &result, "OOO", obpidl, obpbcReserved, obriid); Py_XDECREF(obpidl); Py_XDECREF(obpbcReserved); *************** *** 502,511 **** if (FAILED(hr)) return hr; // Process the Python results, and convert back to the real params ! PyObject *obout; ! if (!PyArg_Parse(result, "O" , &obout)) return PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/); ! BOOL bPythonIsHappy = TRUE; ! if (bPythonIsHappy && !PyCom_InterfaceFromPyInstanceOrObject(obout, riid, ppRet, FALSE /* bNoneOK */)) ! bPythonIsHappy = FALSE; ! if (!bPythonIsHappy) hr = PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/); Py_DECREF(result); return hr; --- 508,513 ---- if (FAILED(hr)) return hr; // Process the Python results, and convert back to the real params ! PyCom_InterfaceFromPyInstanceOrObject(result, riid, ppRet, FALSE /* bNoneOK */); ! hr = PyCom_SetAndLogCOMErrorFromPyException(szMethodName, IID_IShellFolder); Py_DECREF(result); return hr; *************** *** 522,528 **** obpidl1 = PyObject_FromPIDL(pidl1, FALSE); obpidl2 = PyObject_FromPIDL(pidl2, FALSE); ! HRESULT hr=InvokeViaPolicy("CompareIDs", NULL, "lOO", lparam, obpidl1, obpidl2); Py_XDECREF(obpidl1); Py_XDECREF(obpidl2); return hr; } --- 524,535 ---- obpidl1 = PyObject_FromPIDL(pidl1, FALSE); obpidl2 = PyObject_FromPIDL(pidl2, FALSE); ! PyObject *result; ! HRESULT hr=InvokeViaPolicy("CompareIDs", &result, "lOO", lparam, obpidl1, obpidl2); Py_XDECREF(obpidl1); Py_XDECREF(obpidl2); + if (FAILED(hr)) return hr; + if (PyInt_Check(result)) + hr = MAKE_HRESULT(SEVERITY_SUCCESS, 0, PyInt_AsLong(result)); + Py_DECREF(result); return hr; } *************** *** 533,550 **** /* [out] */ void **ppRet) { PY_GATEWAY_METHOD; PyObject *obriid; obriid = PyWinObject_FromIID(riid); PyObject *result; ! HRESULT hr=InvokeViaPolicy("CreateViewObject", &result, "lO", hwndOwner, obriid); Py_XDECREF(obriid); if (FAILED(hr)) return hr; // Process the Python results, and convert back to the real params ! PyObject *obout; ! if (!PyArg_Parse(result, "O" , &obout)) return PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/); ! BOOL bPythonIsHappy = TRUE; ! if (bPythonIsHappy && !PyCom_InterfaceFromPyInstanceOrObject(obout, riid, ppRet, FALSE /* bNoneOK */)) ! bPythonIsHappy = FALSE; ! if (!bPythonIsHappy) hr = PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/); Py_DECREF(result); return hr; --- 540,554 ---- /* [out] */ void **ppRet) { + static const char *szMethodName = "CreateViewObject"; PY_GATEWAY_METHOD; PyObject *obriid; obriid = PyWinObject_FromIID(riid); PyObject *result; ! HRESULT hr=InvokeViaPolicy(szMethodName, &result, "lO", hwndOwner, obriid); Py_XDECREF(obriid); if (FAILED(hr)) return hr; // Process the Python results, and convert back to the real params ! PyCom_InterfaceFromPyInstanceOrObject(result, riid, ppRet, FALSE /* bNoneOK */); ! hr = PyCom_SetAndLogCOMErrorFromPyException(szMethodName, IID_IShellFolder); Py_DECREF(result); return hr; *************** *** 564,568 **** if (FAILED(hr)) return hr; // Process the Python results, and convert back to the real params ! if (!PyArg_Parse(result, "l" , rgfInOut)) return PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/); Py_DECREF(result); return hr; --- 568,573 ---- if (FAILED(hr)) return hr; // Process the Python results, and convert back to the real params ! if (!PyArg_Parse(result, "l" , rgfInOut)) ! hr = PyCom_SetAndLogCOMErrorFromPyException("GetAttributesOf", IID_IShellFolder); Py_DECREF(result); return hr; *************** *** 577,580 **** --- 582,586 ---- /* [out] */ void ** ppRet) { + static const char *szMethodName = "GetUIObjectOf"; PY_GATEWAY_METHOD; PyObject *obpidl; *************** *** 583,587 **** obriid = PyWinObject_FromIID(riid); PyObject *result; ! HRESULT hr=InvokeViaPolicy("GetUIObjectOf", &result, "lOOl", hwndOwner, obpidl, obriid, rgfInOut); Py_XDECREF(obpidl); Py_XDECREF(obriid); --- 589,593 ---- obriid = PyWinObject_FromIID(riid); PyObject *result; ! HRESULT hr=InvokeViaPolicy(szMethodName, &result, "lOOl", hwndOwner, obpidl, obriid, rgfInOut); Py_XDECREF(obpidl); Py_XDECREF(obriid); *************** *** 589,597 **** // Process the Python results, and convert back to the real params PyObject *obout; ! if (!PyArg_ParseTuple(result, "lO" , rgfInOut, &obout)) return PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/); BOOL bPythonIsHappy = TRUE; ! if (bPythonIsHappy && !PyCom_InterfaceFromPyInstanceOrObject(obout, IID_IUnknown, ppRet, FALSE/* bNoneOK */)) bPythonIsHappy = FALSE; ! if (!bPythonIsHappy) hr = PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/); Py_DECREF(result); return hr; --- 595,605 ---- // Process the Python results, and convert back to the real params PyObject *obout; ! UINT inout; ! if (!PyArg_ParseTuple(result, "lO" , &inout, &obout)) return PyCom_SetAndLogCOMErrorFromPyException(szMethodName, IID_IShellFolder); BOOL bPythonIsHappy = TRUE; ! if (bPythonIsHappy && !PyCom_InterfaceFromPyInstanceOrObject(obout, riid, ppRet, FALSE/* bNoneOK */)) bPythonIsHappy = FALSE; ! if (!bPythonIsHappy) hr = PyCom_SetAndLogCOMErrorFromPyException(szMethodName, IID_IShellFolder); ! if (rgfInOut) *rgfInOut = inout; Py_DECREF(result); return hr; *************** *** 603,616 **** /* [out] */ STRRET __RPC_FAR * out) { PY_GATEWAY_METHOD; PyObject *obpidl; obpidl = PyObject_FromPIDL(pidl, FALSE); PyObject *result; ! HRESULT hr=InvokeViaPolicy("GetDisplayNameOf", &result, "Ol", obpidl, uFlags); Py_XDECREF(obpidl); if (FAILED(hr)) return hr; // Process the Python results, and convert back to the real params ! // *** The output argument out of type "STRRET __RPC_FAR *" was not processed *** ! // The type 'STRRET' (out) is unknown. Py_DECREF(result); return hr; --- 611,628 ---- /* [out] */ STRRET __RPC_FAR * out) { + static const char *szMethodName = "GetDisplayNameOf"; + if (!out) + return E_POINTER; PY_GATEWAY_METHOD; PyObject *obpidl; obpidl = PyObject_FromPIDL(pidl, FALSE); PyObject *result; ! HRESULT hr=InvokeViaPolicy(szMethodName, &result, "Ol", obpidl, uFlags); Py_XDECREF(obpidl); if (FAILED(hr)) return hr; // Process the Python results, and convert back to the real params ! out->uType = STRRET_WSTR; ! if (!PyWinObject_AsPfnAllocatedWCHAR(result, PyShell_AllocMem, &out->pOleStr)) ! hr = PyCom_SetAndLogCOMErrorFromPyException(szMethodName, IID_IShellFolder); Py_DECREF(result); return hr; *************** *** 624,627 **** --- 636,640 ---- /* [out] */ LPITEMIDLIST *ppidlOut) { + static const char *szMethodName = "SetNameOf"; PY_GATEWAY_METHOD; PyObject *obpidl; *************** *** 630,639 **** oblpszName = MakeOLECHARToObj(pszName); PyObject *result; ! HRESULT hr=InvokeViaPolicy("SetNameOf", &result, "lOOl", hwnd, obpidl, oblpszName, uFlags); Py_XDECREF(obpidl); Py_XDECREF(oblpszName); ! PyObject_AsPIDL(result, ppidlOut, FALSE); ! return PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/); } --- 643,654 ---- oblpszName = MakeOLECHARToObj(pszName); PyObject *result; ! HRESULT hr=InvokeViaPolicy(szMethodName, &result, "lOOl", hwnd, obpidl, oblpszName, uFlags); Py_XDECREF(obpidl); Py_XDECREF(oblpszName); ! if (FAILED(hr)) return hr; PyObject_AsPIDL(result, ppidlOut, FALSE); ! hr = PyCom_SetAndLogCOMErrorFromPyException(szMethodName, IID_IShellFolder); ! Py_DECREF(result); ! return hr; } |