Fixes for 64-bit Windows: In ctypes.wintypes, correct the definitions
of HANDLE, WPARAM, LPARAM data types. Make parameterless foreign function calls work.
This commit is contained in:
parent
9fdfadb06e
commit
8138c26a83
|
@ -3,6 +3,7 @@
|
||||||
from ctypes import *
|
from ctypes import *
|
||||||
from ctypes.test import is_resource_enabled
|
from ctypes.test import is_resource_enabled
|
||||||
import unittest, sys
|
import unittest, sys
|
||||||
|
from ctypes import wintypes
|
||||||
|
|
||||||
import _ctypes_test
|
import _ctypes_test
|
||||||
|
|
||||||
|
@ -32,12 +33,30 @@ if sys.platform == "win32" and sizeof(c_void_p) == sizeof(c_int):
|
||||||
# or wrong calling convention
|
# or wrong calling convention
|
||||||
self.assertRaises(ValueError, IsWindow, None)
|
self.assertRaises(ValueError, IsWindow, None)
|
||||||
|
|
||||||
|
if sys.platform == "win32":
|
||||||
|
class FunctionCallTestCase(unittest.TestCase):
|
||||||
|
|
||||||
if is_resource_enabled("SEH"):
|
if is_resource_enabled("SEH"):
|
||||||
def test_SEH(self):
|
def test_SEH(self):
|
||||||
# Call functions with invalid arguments, and make sure that access violations
|
# Call functions with invalid arguments, and make sure
|
||||||
# are trapped and raise an exception.
|
# that access violations are trapped and raise an
|
||||||
|
# exception.
|
||||||
self.assertRaises(WindowsError, windll.kernel32.GetModuleHandleA, 32)
|
self.assertRaises(WindowsError, windll.kernel32.GetModuleHandleA, 32)
|
||||||
|
|
||||||
|
def test_noargs(self):
|
||||||
|
# This is a special case on win32 x64
|
||||||
|
windll.user32.GetDesktopWindow()
|
||||||
|
|
||||||
|
class TestWintypes(unittest.TestCase):
|
||||||
|
def test_HWND(self):
|
||||||
|
self.failUnlessEqual(sizeof(wintypes.HWND), sizeof(c_void_p))
|
||||||
|
|
||||||
|
def test_PARAM(self):
|
||||||
|
self.failUnlessEqual(sizeof(wintypes.WPARAM),
|
||||||
|
sizeof(c_void_p))
|
||||||
|
self.failUnlessEqual(sizeof(wintypes.LPARAM),
|
||||||
|
sizeof(c_void_p))
|
||||||
|
|
||||||
class Structures(unittest.TestCase):
|
class Structures(unittest.TestCase):
|
||||||
|
|
||||||
def test_struct_by_value(self):
|
def test_struct_by_value(self):
|
||||||
|
|
|
@ -34,8 +34,14 @@ LPCOLESTR = LPOLESTR = OLESTR = c_wchar_p
|
||||||
LPCWSTR = LPWSTR = c_wchar_p
|
LPCWSTR = LPWSTR = c_wchar_p
|
||||||
LPCSTR = LPSTR = c_char_p
|
LPCSTR = LPSTR = c_char_p
|
||||||
|
|
||||||
WPARAM = c_uint
|
# WPARAM is defined as UINT_PTR (which is signed)
|
||||||
LPARAM = c_long
|
# LPARAM is defined as LONG_PTR (which is unsigned)
|
||||||
|
if sizeof(c_long) == sizeof(c_void_p):
|
||||||
|
WPARAM = c_ulong
|
||||||
|
LPARAM = c_long
|
||||||
|
elif sizeof(c_longlong) == sizeof(c_void_p):
|
||||||
|
WPARAM = c_ulonglong
|
||||||
|
LPARAM = c_longlong
|
||||||
|
|
||||||
ATOM = WORD
|
ATOM = WORD
|
||||||
LANGID = WORD
|
LANGID = WORD
|
||||||
|
@ -48,7 +54,7 @@ LCID = DWORD
|
||||||
|
|
||||||
################################################################
|
################################################################
|
||||||
# HANDLE types
|
# HANDLE types
|
||||||
HANDLE = c_ulong # in the header files: void *
|
HANDLE = c_void_p # in the header files: void *
|
||||||
|
|
||||||
HACCEL = HANDLE
|
HACCEL = HANDLE
|
||||||
HBITMAP = HANDLE
|
HBITMAP = HANDLE
|
||||||
|
|
|
@ -109,6 +109,10 @@ Core and builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Fixes for 64-bit Windows: In ctypes.wintypes, correct the
|
||||||
|
definitions of HANDLE, WPARAM, LPARAM data types. Make
|
||||||
|
parameterless foreign function calls work.
|
||||||
|
|
||||||
- The version number of the ctypes package changed to "1.1.0".
|
- The version number of the ctypes package changed to "1.1.0".
|
||||||
|
|
||||||
- Bug #1627575: logging: Added _open() method to FileHandler which can
|
- Bug #1627575: logging: Added _open() method to FileHandler which can
|
||||||
|
|
|
@ -224,7 +224,8 @@ ffi_call(/*@dependent@*/ ffi_cif *cif,
|
||||||
#else
|
#else
|
||||||
case FFI_SYSV:
|
case FFI_SYSV:
|
||||||
/*@-usedef@*/
|
/*@-usedef@*/
|
||||||
return ffi_call_AMD64(ffi_prep_args, &ecif, cif->bytes,
|
/* Function call needs at least 40 bytes stack size, on win64 AMD64 */
|
||||||
|
return ffi_call_AMD64(ffi_prep_args, &ecif, cif->bytes ? cif->bytes : 40,
|
||||||
cif->flags, ecif.rvalue, fn);
|
cif->flags, ecif.rvalue, fn);
|
||||||
/*@=usedef@*/
|
/*@=usedef@*/
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue