ctypes - python2.7.3 vs python3.2.3

Rolf rolfb at personalized-books.com
Tue Aug 28 17:35:48 EDT 2012


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.



More information about the Python-list mailing list