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:
Thomas Heller 2007-05-04 07:14:39 +00:00
parent c0e9840028
commit 0455214f1c
3 changed files with 11 additions and 4 deletions

View File

@ -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()

View File

@ -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")

View File

@ -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")