ctypes works as I would expect with python2.7.3. However, when I upgrade to python3.2.3 things don't seem to work right. Look below for details.
I am not sure where I am going wrong. Shared Library ============== #include <stdint.h> #include <string.h> extern "C" { int main(); uint32_t myfunction (char **); } uint32_t myfunction (char ** _mydata) { char mydata[16]; strcpy(mydata, "Hello Dude!"); *_mydata = mydata; return 0; } int main() { return 0; } Python 2.7.3 which works as I would expect ========================================== > python2.7 -V Python 2.7.3 > cat py27.py #!/usr/bin/env python2.7 from __future__ import print_function from __future__ import unicode_literals from ctypes import * lib = CDLL('libtest.so') o_result = c_char_p() lib.myfunction(pointer(o_result)) print(repr(o_result.value)) > ./py27.py 'Hello Dude!' Python 3.2.3 return string gets mangled ======================================= > python3 -V Python 3.2.3 > cat py3.py #!/usr/bin/env python3 from ctypes import * lib = CDLL('libtest.so') o_result = c_char_p() lib.myfunction(pointer(o_result)) print(repr(o_result.value)) > ./py3.py b'\xd8\xb0y\to Dude!' Every time I run it, I get a different set of values. -- http://mail.python.org/mailman/listinfo/python-list