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