Thread: [pywin32-checkins] pywin32/win32/src win32gui.i,1.108,1.109
OLD project page for the Python extensions for Windows
Brought to you by:
mhammond
From: Mark H. <mha...@us...> - 2007-05-30 07:06:11
|
Update of /cvsroot/pywin32/pywin32/win32/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29102 Modified Files: win32gui.i Log Message: Fix x64 handling of LPARAM in DialogBoxIndirect Fix a couple of other x64 warnings Index: win32gui.i =================================================================== RCS file: /cvsroot/pywin32/pywin32/win32/src/win32gui.i,v retrieving revision 1.108 retrieving revision 1.109 diff -C2 -d -r1.108 -r1.109 *** win32gui.i 27 May 2007 13:25:42 -0000 1.108 --- win32gui.i 30 May 2007 07:06:11 -0000 1.109 *************** *** 765,769 **** PyObject *obWndProc = PyTuple_GET_ITEM(obTuple, 0); // Replace the lParam with the one the user specified. ! lParam = PyInt_AsLong( PyTuple_GET_ITEM(obTuple, 1) ); PyObject *key = PyWinLong_FromHANDLE(hWnd); --- 765,771 ---- PyObject *obWndProc = PyTuple_GET_ITEM(obTuple, 0); // Replace the lParam with the one the user specified. ! lParam = 0; ! if (PyTuple_GET_ITEM(obTuple, 1) != Py_None) ! PyWinObject_AsPARAM( PyTuple_GET_ITEM(obTuple, 1), &lParam ); PyObject *key = PyWinLong_FromHANDLE(hWnd); *************** *** 1613,1617 **** PyObject *O = NULL; void *addr = NULL; ! int len = 0; // @pyparm int|obj||the buffer object --- 1615,1619 ---- PyObject *O = NULL; void *addr = NULL; ! Py_ssize_t len = 0; // @pyparm int|obj||the buffer object *************** *** 2083,2099 **** static PyObject *PyDialogBoxIndirect(PyObject *self, PyObject *args) { - /// XXX - todo - add support for a dialogproc! HINSTANCE hinst; HWND hwnd; ! LPARAM param=0; PyObject *obhinst, *obhwnd, *obList, *obDlgProc; BOOL bFreeString = FALSE; ! ! if (!PyArg_ParseTuple(args, "OOOO|l", &obhinst, // @pyparm <o PyHANDLE>|hInstance||Handle to module creating the dialog box &obList, // @pyparm list|controlList||List containing a <o Dialog Header Tuple>, followed by variable number of <o Dialog Item Tuple>s &obhwnd, // @pyparm <o PyHANDLE>|hWndParent||Handle to dialog's parent window &obDlgProc, // @pyparm function|DialogFunc||Dialog box procedure to process messages ! ¶m)) // @pyparm int|InitParam|0|Initialization data to be passed to above procedure during WM_INITDIALOG processing return NULL; if (!PyWinObject_AsHANDLE(obhinst, (HANDLE *)&hinst, FALSE)) --- 2085,2100 ---- static PyObject *PyDialogBoxIndirect(PyObject *self, PyObject *args) { HINSTANCE hinst; HWND hwnd; ! PyObject *obParam = Py_None; PyObject *obhinst, *obhwnd, *obList, *obDlgProc; BOOL bFreeString = FALSE; ! ! if (!PyArg_ParseTuple(args, "OOOO|O", &obhinst, // @pyparm <o PyHANDLE>|hInstance||Handle to module creating the dialog box &obList, // @pyparm list|controlList||List containing a <o Dialog Header Tuple>, followed by variable number of <o Dialog Item Tuple>s &obhwnd, // @pyparm <o PyHANDLE>|hWndParent||Handle to dialog's parent window &obDlgProc, // @pyparm function|DialogFunc||Dialog box procedure to process messages ! &obParam)) // @pyparm long|InitParam|0|Initialization data to be passed to above procedure during WM_INITDIALOG processing return NULL; if (!PyWinObject_AsHANDLE(obhinst, (HANDLE *)&hinst, FALSE)) *************** *** 2101,2104 **** --- 2102,2110 ---- if (!PyWinObject_AsHANDLE(obhwnd, (HANDLE *)&hwnd, TRUE)) return NULL; + // We unpack the object in the dlgproc - but check validity now + if (obParam != Py_None && !PyInt_Check(obParam) && !PyLong_Check(obParam)) { + return PyErr_Format(PyExc_TypeError, "optional param must be None, or an integer (got %s)", + obParam->ob_type->tp_name); + } HGLOBAL h = MakeResourceFromDlgList(obList); *************** *** 2106,2114 **** return NULL; ! PyObject *obExtra = Py_BuildValue("Ol", obDlgProc, param); INT_PTR rc; Py_BEGIN_ALLOW_THREADS - HGLOBAL templ = (HGLOBAL) GlobalLock(h); rc = DialogBoxIndirectParam(hinst, (const DLGTEMPLATE *) templ, hwnd, PyDlgProcHDLG, (LPARAM)obExtra); GlobalUnlock(h); --- 2112,2125 ---- return NULL; ! HGLOBAL templ = (HGLOBAL) GlobalLock(h); ! if (!templ) { ! GlobalFree(h); ! return PyWin_SetAPIError("GlobalLock (for template)"); ! } ! ! PyObject *obExtra = Py_BuildValue("OO", obDlgProc, obParam); INT_PTR rc; Py_BEGIN_ALLOW_THREADS rc = DialogBoxIndirectParam(hinst, (const DLGTEMPLATE *) templ, hwnd, PyDlgProcHDLG, (LPARAM)obExtra); GlobalUnlock(h); *************** *** 2378,2382 **** PyObject *PyCreateAcceleratorTable(PyObject *self, PyObject *args) { ! int num, i; ACCEL *accels = NULL; PyObject *ret = NULL; --- 2389,2393 ---- PyObject *PyCreateAcceleratorTable(PyObject *self, PyObject *args) { ! Py_ssize_t num, i; ACCEL *accels = NULL; PyObject *ret = NULL; |