Fix some ctypes test crashes, when running with a debug Python
version on win64 by using proper argtypes and restype function attributes.
This commit is contained in:
parent
c0e9840028
commit
0455214f1c
|
@ -34,7 +34,7 @@ class Test(unittest.TestCase):
|
||||||
def test_oledll(self):
|
def test_oledll(self):
|
||||||
self.failUnlessRaises(WindowsError,
|
self.failUnlessRaises(WindowsError,
|
||||||
oledll.oleaut32.CreateTypeLib2,
|
oledll.oleaut32.CreateTypeLib2,
|
||||||
0, 0, 0)
|
0, None, None)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -10,7 +10,10 @@ from _ctypes import PyObj_FromPtr
|
||||||
################################################################
|
################################################################
|
||||||
|
|
||||||
from sys import getrefcount as grc
|
from sys import getrefcount as grc
|
||||||
|
if sys.version_info > (2, 4):
|
||||||
|
c_py_ssize_t = c_size_t
|
||||||
|
else:
|
||||||
|
c_py_ssize_t = c_int
|
||||||
|
|
||||||
class PythonAPITestCase(unittest.TestCase):
|
class PythonAPITestCase(unittest.TestCase):
|
||||||
|
|
||||||
|
@ -18,7 +21,7 @@ class PythonAPITestCase(unittest.TestCase):
|
||||||
PyString_FromStringAndSize = pythonapi.PyString_FromStringAndSize
|
PyString_FromStringAndSize = pythonapi.PyString_FromStringAndSize
|
||||||
|
|
||||||
PyString_FromStringAndSize.restype = py_object
|
PyString_FromStringAndSize.restype = py_object
|
||||||
PyString_FromStringAndSize.argtypes = c_char_p, c_int
|
PyString_FromStringAndSize.argtypes = c_char_p, c_py_ssize_t
|
||||||
|
|
||||||
self.failUnlessEqual(PyString_FromStringAndSize("abcdefghi", 3), "abc")
|
self.failUnlessEqual(PyString_FromStringAndSize("abcdefghi", 3), "abc")
|
||||||
|
|
||||||
|
@ -66,7 +69,7 @@ class PythonAPITestCase(unittest.TestCase):
|
||||||
|
|
||||||
def test_PyOS_snprintf(self):
|
def test_PyOS_snprintf(self):
|
||||||
PyOS_snprintf = pythonapi.PyOS_snprintf
|
PyOS_snprintf = pythonapi.PyOS_snprintf
|
||||||
PyOS_snprintf.argtypes = POINTER(c_char), c_int, c_char_p
|
PyOS_snprintf.argtypes = POINTER(c_char), c_size_t, c_char_p
|
||||||
|
|
||||||
buf = c_buffer(256)
|
buf = c_buffer(256)
|
||||||
PyOS_snprintf(buf, sizeof(buf), "Hello from %s", "ctypes")
|
PyOS_snprintf(buf, sizeof(buf), "Hello from %s", "ctypes")
|
||||||
|
|
|
@ -13,6 +13,10 @@ if sys.platform == "win32":
|
||||||
|
|
||||||
def test(self):
|
def test(self):
|
||||||
from _ctypes import call_function
|
from _ctypes import call_function
|
||||||
|
windll.kernel32.LoadLibraryA.restype = c_void_p
|
||||||
|
windll.kernel32.GetProcAddress.argtypes = c_void_p, c_char_p
|
||||||
|
windll.kernel32.GetProcAddress.restype = c_void_p
|
||||||
|
|
||||||
hdll = windll.kernel32.LoadLibraryA("kernel32")
|
hdll = windll.kernel32.LoadLibraryA("kernel32")
|
||||||
funcaddr = windll.kernel32.GetProcAddress(hdll, "GetModuleHandleA")
|
funcaddr = windll.kernel32.GetProcAddress(hdll, "GetModuleHandleA")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue