[pywin32-checkins] pywin32/com/win32com/src PythonCOM.cpp, 1.59, 1.60
OLD project page for the Python extensions for Windows
Brought to you by:
mhammond
From: Roger U. <ru...@us...> - 2009-04-01 13:13:15
|
Update of /cvsroot/pywin32/pywin32/com/win32com/src In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv7333 Modified Files: PythonCOM.cpp Log Message: Load CreateURLMonikerEx function pointer dynamically Standardize loading of CoWaitForMultipleHandles Index: PythonCOM.cpp =================================================================== RCS file: /cvsroot/pywin32/pywin32/com/win32com/src/PythonCOM.cpp,v retrieving revision 1.59 retrieving revision 1.60 diff -C2 -d -r1.59 -r1.60 *** PythonCOM.cpp 3 Feb 2009 03:23:07 -0000 1.59 --- PythonCOM.cpp 1 Apr 2009 12:42:32 -0000 1.60 *************** *** 86,95 **** // Function pointers we load at runtime. ! HRESULT (STDAPICALLTYPE *pfnCoWaitForMultipleHandles)(DWORD dwFlags, DWORD dwTimeout, ULONG cHandles, LPHANDLE pHandles, LPDWORD lpdwindex ! ) = NULL; // typedefs for the function pointers are in OleAcc.h --- 86,101 ---- // Function pointers we load at runtime. ! #define CHECK_PFN(fname) if (pfn##fname==NULL) return PyCom_BuildPyException(E_NOTIMPL); ! ! typedef HRESULT (STDAPICALLTYPE *CoWaitForMultipleHandlesfunc)(DWORD dwFlags, DWORD dwTimeout, ULONG cHandles, LPHANDLE pHandles, LPDWORD lpdwindex ! ); ! static CoWaitForMultipleHandlesfunc pfnCoWaitForMultipleHandles = NULL; ! ! typedef HRESULT (STDAPICALLTYPE *CreateURLMonikerExfunc)(LPMONIKER,LPCWSTR,LPMONIKER *,DWORD); ! static CreateURLMonikerExfunc pfnCreateURLMonikerEx = NULL; // typedefs for the function pointers are in OleAcc.h *************** *** 917,920 **** --- 923,928 ---- HRESULT hr; DWORD flags = URL_MK_UNIFORM; + CHECK_PFN(CreateURLMonikerEx); + if (!PyArg_ParseTuple(args, "OO|k:CreateURLMonikerEx", &obbase, // @pyparm <o PyIMoniker>|Context||An IMoniker interface to be used as a base with a partial URL, can be None *************** *** 927,931 **** if (PyCom_InterfaceFromPyObject(obbase, IID_IMoniker, (LPVOID*)&base_moniker, TRUE)){ PY_INTERFACE_PRECALL; ! hr = CreateURLMonikerEx(base_moniker, url, &output_moniker, flags); if (base_moniker) base_moniker->Release(); --- 935,939 ---- if (PyCom_InterfaceFromPyObject(obbase, IID_IMoniker, (LPVOID*)&base_moniker, TRUE)){ PY_INTERFACE_PRECALL; ! hr = (*pfnCreateURLMonikerEx)(base_moniker, url, &output_moniker, flags); if (base_moniker) base_moniker->Release(); *************** *** 1553,1565 **** DWORD numItems; HANDLE *pItems = NULL; ! if (!pfnCoWaitForMultipleHandles) { ! return PyCom_BuildPyException(E_NOTIMPL); ! return NULL; ! } if (!PyArg_ParseTuple(args, "iiO:CoWaitForMultipleHandles", ! &flags, // @pyparm int|flags|| ! &timeout, // @pyparm int|timeout|| ! &obHandles)) // @pyparm [<o PyHANDLE>, ...]|handles|| return NULL; if (!MakeHandleList(obHandles, &pItems, &numItems)) --- 1561,1570 ---- DWORD numItems; HANDLE *pItems = NULL; ! CHECK_PFN(CoWaitForMultipleHandles); if (!PyArg_ParseTuple(args, "iiO:CoWaitForMultipleHandles", ! &flags, // @pyparm int|Flags||Combination of pythoncom.COWAIT_* values ! &timeout, // @pyparm int|Timeout||Timeout in milliseconds ! &obHandles)) // @pyparm [<o PyHANDLE>, ...]|Handles||Sequence of handles return NULL; if (!MakeHandleList(obHandles, &pItems, &numItems)) *************** *** 2082,2088 **** // Load function pointers. HMODULE hModOle32 = GetModuleHandle(_T("ole32.dll")); ! pfnCoWaitForMultipleHandles = \ ! (HRESULT (STDAPICALLTYPE *)(DWORD, DWORD, ULONG, LPHANDLE, LPDWORD)) \ ! GetProcAddress(hModOle32, "CoWaitForMultipleHandles"); // Symbolic constants. --- 2087,2098 ---- // Load function pointers. HMODULE hModOle32 = GetModuleHandle(_T("ole32.dll")); ! if (hModOle32) ! pfnCoWaitForMultipleHandles = (CoWaitForMultipleHandlesfunc)GetProcAddress(hModOle32, "CoWaitForMultipleHandles"); ! ! HMODULE hModurlmon = GetModuleHandle(_T("urlmon.dll")); ! if (hModurlmon == NULL) ! hModurlmon = LoadLibrary(_T("urlmon.dll")); ! if (hModurlmon) ! pfnCreateURLMonikerEx = (CreateURLMonikerExfunc)GetProcAddress(hModurlmon, "CreateURLMonikerEx"); // Symbolic constants. *************** *** 2370,2373 **** --- 2380,2387 ---- ADD_CONSTANT(URL_MK_LEGACY); + // Flags for CoWaitForMultipleHandles + ADD_CONSTANT(COWAIT_WAITALL); + ADD_CONSTANT(COWAIT_ALERTABLE); + #ifndef NO_PYCOM_IDISPATCHEX ADD_CONSTANT(fdexNameCaseSensitive); // Request that the name lookup be done in a case-sensitive manner. May be ignored by object that does not support case-sensitive lookup. |