metolone+gmane at gmail.com
Wed Jan 14 03:17:39 CET 2009
"Aaron Brady" <castironpi at gmail.com> wrote in message
news:6197f37d-0ea0-4430-a466-2f36b2011ea8 at v42g2000yqj.googlegroups.com...
On Jan 13, 10:22 am, Grimson <grim... at gmx.de> wrote:
> hello out there,
> I have a problem with c-types.
> I made a c-library, which expects a pointer to a self defined structure.
> let the funtion call myfunction(struct interface* iface)
> and the struct:
> struct interface
> int a;
> int b;
> char *c;
> the Python ctype port of this structur would be:
> class INTERFACE(Structure):
> _fields_ = [("a" c_int),
> ("b", c_int),
> ("c", c_char)]
> in my python-struct a create a instance of INTERFACE
> myiface = INTERFACE()
> myiface.a = ctypes.c_int(80)
> myiface.b = ctypes.c_int(22)
> than I make a pointer onto it.
> p_iface = ctypes.pointer(myiface)
> and I tried it also with a reference
> r_iface = ctypes.byref(myiface)
> but neither myclib.myfunction(p_iface) nor myclib.myfunction(r_iface)
> works properly. The function is been called but it reads only zeros (0)
> for each parameter (member in the struct).
> Where is my fault?
I believe you want ("c",c_char_p), although I don't get the same error as
you describe when I use c_char. Below is my working code (Python 2.6.1 and
Visual Studio 2008):
---- x.py ----
from ctypes import *
_fields_ = [
x = CDLL('x.dll')
i = INTERFACE()
i.a = 1
i.b = 2
i.c = 'hello'
---- cl /LD /W4 x.c -> x.dll ----
void myfunction(struct interface* iface)
printf("%d %d %s\n",iface->a,iface->b,iface->c);
More information about the Python-list