[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;
}
|