Skip to content Skip to sidebar Skip to footer

Casting Into A Python String From A Char[] Returned By A Dll

I am attempting to cast a C style const char[] string pointer (returned from a DLL) into a Python compatible string type. but when Python27 executes: import ctypes charPtr = ctyp

Solution 1:

ctypes.cast() is used to convert one ctype instance to another ctype datatype. You don't need it To convert it to python string. Just use ".value" to get it in python string.

>>>s = "Hello, World">>>c_s = c_char_p(s)>>>print c_s
c_char_p('Hello, World')
>>>print c_s.value
Hello, World

More info here

Solution 2:

If you set the argtypes or restype attributes of ctypes functions, they will return the right Python object without the need for a cast.

Here's an example calling the C-runtime time and ctime functions:

>>>from ctypes import *>>>m=CDLL('msvcrt')>>>t=c_long(0)>>>m.time(byref(t))
1326700130
>>>m.ctime(byref(t))  # restype not set
6952984
>>>m.ctime.restype=c_char_p  # set restype correctly>>>m.ctime(byref(t))
'Sun Jan 15 23:48:50 2012\n'

Post a Comment for "Casting Into A Python String From A Char[] Returned By A Dll"