From: <mha...@us...> - 2003-10-07 05:13:29
|
Update of /cvsroot/pywin32/pywin32/com/win32comext/shell/src In directory sc8-pr-cvs1:/tmp/cvs-serv19672/src Modified Files: shell.cpp Added Files: PyICopyHook.cpp PyICopyHook.h Log Message: Support ICopyHook --- NEW FILE: PyICopyHook.cpp --- // This file implements the ICopyHook Interface and Gateway for Python. // Generated by makegw.py #include "shell_pch.h" #include "PyICopyHook.h" // @doc - This file contains autoduck documentation // --------------------------------------------------- // // Interface Implementation PyICopyHook::PyICopyHook(IUnknown *pdisp): PyIUnknown(pdisp) { ob_type = &type; } PyICopyHook::~PyICopyHook() { } /* static */ ICopyHook *PyICopyHook::GetI(PyObject *self) { return (ICopyHook *)PyIUnknown::GetI(self); } // @pymethod |PyICopyHook|CopyCallback|Description of CopyCallback. PyObject *PyICopyHook::CopyCallback(PyObject *self, PyObject *args) { ICopyHook *pICH = GetI(self); if ( pICH == NULL ) return NULL; // @pyparm HWND|hwnd||Description for hwnd // @pyparm int|wFunc||Description for wFunc // @pyparm int|wFlags||Description for wFlags // @pyparm string/<o unicode>|srcFile||Description for srcFile // @pyparm int|srcAttribs||Description for srcAttribs // @pyparm string/<o unicode>|destFile||Description for destFile // @pyparm int|destAttribs||Description for destAttribs PyObject *obsrcFile; PyObject *obdestFile; HWND hwnd; UINT wFunc; UINT wFlags; LPTSTR srcFile; DWORD srcAttribs; LPTSTR destFile; DWORD destAttribs; if ( !PyArg_ParseTuple(args, "liiOlOl:CopyCallback", &hwnd, &wFunc, &wFlags, &obsrcFile, &srcAttribs, &obdestFile, &destAttribs) ) return NULL; BOOL bPythonIsHappy = TRUE; if (bPythonIsHappy && !PyWinObject_AsTCHAR(obsrcFile, &srcFile)) bPythonIsHappy = FALSE; if (bPythonIsHappy && !PyWinObject_AsTCHAR(obdestFile, &destFile)) bPythonIsHappy = FALSE; if (!bPythonIsHappy) return NULL; HRESULT hr; PY_INTERFACE_PRECALL; hr = pICH->CopyCallback( hwnd, wFunc, wFlags, srcFile, srcAttribs, destFile, destAttribs ); PyWinObject_FreeTCHAR(srcFile); PyWinObject_FreeTCHAR(destFile); PY_INTERFACE_POSTCALL; if ( FAILED(hr) ) return PyCom_BuildPyException(hr, pICH, IID_IShellCopyHook ); Py_INCREF(Py_None); return Py_None; } // @object PyICopyHook|Description of the interface static struct PyMethodDef PyICopyHook_methods[] = { { "CopyCallback", PyICopyHook::CopyCallback, 1 }, // @pymeth CopyCallback|Description of CopyCallback { NULL } }; PyComTypeObject PyICopyHook::type("PyICopyHook", &PyIUnknown::type, sizeof(PyICopyHook), PyICopyHook_methods, GET_PYCOM_CTOR(PyICopyHook)); // --------------------------------------------------- // // Gateway Implementation STDMETHODIMP_(UINT) PyGCopyHook::CopyCallback( /* [unique][in] */ HWND hwnd, /* [unique][in] */ UINT wFunc, /* [unique][in] */ UINT wFlags, /* [unique][in] */ LPCTSTR srcFile, /* [unique][in] */ DWORD srcAttribs, /* [unique][in] */ LPCTSTR destFile, /* [unique][in] */ DWORD destAttribs) { PY_GATEWAY_METHOD; PyObject *obsrcFile; PyObject *obdestFile; obsrcFile = PyWinObject_FromTCHAR((LPTSTR)srcFile); obdestFile = PyWinObject_FromTCHAR((LPTSTR)destFile); PyObject *result; HRESULT hr=InvokeViaPolicy("CopyCallback", &result, "liiOlOl", hwnd, wFunc, wFlags, obsrcFile, srcAttribs, obdestFile, destAttribs); Py_XDECREF(obsrcFile); Py_XDECREF(obdestFile); if (FAILED(hr)) return hr; if (!PyInt_Check(result) || !PyLong_Check(result)) { PyErr_Format(PyExc_TypeError, "CopyCallBack should return an int, not a '%s'", result->ob_type->tp_name); hr = PyCom_HandlePythonFailureToCOM(/*pexcepinfo*/); } else hr = PyInt_AsLong(result); Py_DECREF(result); return hr; } --- NEW FILE: PyICopyHook.h --- // This file declares the ICopyHook Interface and Gateway for Python. // Generated by makegw.py // --------------------------------------------------- // // Interface Declaration class PyICopyHook : public PyIUnknown { public: MAKE_PYCOM_CTOR(PyICopyHook); static ICopyHook *GetI(PyObject *self); static PyComTypeObject type; // The Python methods static PyObject *CopyCallback(PyObject *self, PyObject *args); protected: PyICopyHook(IUnknown *pdisp); ~PyICopyHook(); }; // --------------------------------------------------- // // Gateway Declaration class PyGCopyHook : public PyGatewayBase, public ICopyHook { protected: PyGCopyHook(PyObject *instance) : PyGatewayBase(instance) { ; } PYGATEWAY_MAKE_SUPPORT2(PyGCopyHook, ICopyHook, IID_IShellCopyHook, PyGatewayBase) // ICopyHook STDMETHOD_(UINT, CopyCallback)( HWND hwnd, UINT wFunc, UINT wFlags, LPCTSTR srcFile, DWORD srcAttribs, LPCTSTR destFile, DWORD destAttribs); }; Index: shell.cpp =================================================================== RCS file: /cvsroot/pywin32/pywin32/com/win32comext/shell/src/shell.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** shell.cpp 7 Oct 2003 02:31:08 -0000 1.7 --- shell.cpp 7 Oct 2003 05:13:22 -0000 1.8 *************** *** 20,23 **** --- 20,24 ---- #include "PyIShellFolder.h" #include "PyIEnumIDList.h" + #include "PyICopyHook.h" #include "PythonCOMRegister.h" // For simpler registration of IIDs etc. *************** *** 669,672 **** --- 670,676 ---- PYCOM_INTERFACE_FULL(ShellFolder), PYCOM_INTERFACE_FULL(EnumIDList), + // IID_ICopyHook doesn't exist - hack it up + { &IID_IShellCopyHook, "IShellCopyHook", "IID_IShellCopyHook", &PyICopyHook::type, GET_PYGATEWAY_CTOR(PyGCopyHook) }, + { &IID_IShellCopyHook, "ICopyHook", "IID_ICopyHook", NULL, NULL }, }; |