mirror of https://github.com/python/cpython.git
Merged revisions 88284 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r88284 | antoine.pitrou | 2011-01-31 22:08:57 +0100 (lun., 31 janv. 2011) | 4 lines Issue #8275: Fix passing of callback arguments with ctypes under Win64. Patch by Stan Mihai. Ok'ed by Georg. ........
This commit is contained in:
parent
37c4a723a4
commit
820021ebd8
|
@ -206,6 +206,42 @@ def EnumWindowsCallbackFunc(hwnd, lParam):
|
|||
|
||||
windll.user32.EnumWindows(EnumWindowsCallbackFunc, 0)
|
||||
|
||||
def test_callback_register_int(self):
|
||||
# Issue #8275: buggy handling of callback args under Win64
|
||||
# NOTE: should be run on release builds as well
|
||||
dll = CDLL(_ctypes_test.__file__)
|
||||
CALLBACK = CFUNCTYPE(c_int, c_int, c_int, c_int, c_int, c_int)
|
||||
# All this function does is call the callback with its args squared
|
||||
func = dll._testfunc_cbk_reg_int
|
||||
func.argtypes = (c_int, c_int, c_int, c_int, c_int, CALLBACK)
|
||||
func.restype = c_int
|
||||
|
||||
def callback(a, b, c, d, e):
|
||||
return a + b + c + d + e
|
||||
|
||||
result = func(2, 3, 4, 5, 6, CALLBACK(callback))
|
||||
self.assertEqual(result, callback(2*2, 3*3, 4*4, 5*5, 6*6))
|
||||
|
||||
def test_callback_register_double(self):
|
||||
# Issue #8275: buggy handling of callback args under Win64
|
||||
# NOTE: should be run on release builds as well
|
||||
dll = CDLL(_ctypes_test.__file__)
|
||||
CALLBACK = CFUNCTYPE(c_double, c_double, c_double, c_double,
|
||||
c_double, c_double)
|
||||
# All this function does is call the callback with its args squared
|
||||
func = dll._testfunc_cbk_reg_double
|
||||
func.argtypes = (c_double, c_double, c_double,
|
||||
c_double, c_double, CALLBACK)
|
||||
func.restype = c_double
|
||||
|
||||
def callback(a, b, c, d, e):
|
||||
return a + b + c + d + e
|
||||
|
||||
result = func(1.1, 2.2, 3.3, 4.4, 5.5, CALLBACK(callback))
|
||||
self.assertEqual(result,
|
||||
callback(1.1*1.1, 2.2*2.2, 3.3*3.3, 4.4*4.4, 5.5*5.5))
|
||||
|
||||
|
||||
################################################################
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -539,6 +539,7 @@ Luke Mewburn
|
|||
Mike Meyer
|
||||
Steven Miale
|
||||
Trent Mick
|
||||
Stan Mihai
|
||||
Aristotelis Mikropoulos
|
||||
Damien Miller
|
||||
Chad Miller
|
||||
|
|
|
@ -37,6 +37,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #8275: Fix passing of callback arguments with ctypes under Win64.
|
||||
Patch by Stan Mihai.
|
||||
|
||||
- Issue #10940: Workaround an IDLE hang on Mac OS X 10.6 when using the
|
||||
menu accelerators for Open Module, Go to Line, and New Indent Width.
|
||||
The accelerators still work but no longer appear in the menu items.
|
||||
|
|
|
@ -25,6 +25,20 @@
|
|||
|
||||
/* some functions handy for testing */
|
||||
|
||||
EXPORT(int)
|
||||
_testfunc_cbk_reg_int(int a, int b, int c, int d, int e,
|
||||
int (*func)(int, int, int, int, int))
|
||||
{
|
||||
return func(a*a, b*b, c*c, d*d, e*e);
|
||||
}
|
||||
|
||||
EXPORT(double)
|
||||
_testfunc_cbk_reg_double(double a, double b, double c, double d, double e,
|
||||
double (*func)(double, double, double, double, double))
|
||||
{
|
||||
return func(a*a, b*b, c*c, d*d, e*e);
|
||||
}
|
||||
|
||||
EXPORT(void)testfunc_array(int values[4])
|
||||
{
|
||||
printf("testfunc_array %d %d %d %d\n",
|
||||
|
|
|
@ -380,7 +380,7 @@ ffi_prep_closure_loc (ffi_closure* closure,
|
|||
short bytes;
|
||||
char *tramp;
|
||||
#ifdef _WIN64
|
||||
int mask;
|
||||
int mask = 0;
|
||||
#endif
|
||||
FFI_ASSERT (cif->abi == FFI_SYSV);
|
||||
|
||||
|
|
Loading…
Reference in New Issue