"Aaron Brady" <castiro...@gmail.com> wrote in message
news:6197f37d-0ea0-4430-a466-2f36b2011...@v42g2000yqj.googlegroups.com...
On Jan 13, 10:22 am, Grimson <grim...@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 *
class INTERFACE(Structure):
_fields_ = [
('a',c_int),
('b',c_int),
('c',c_char)
]
x = CDLL('x.dll')
i = INTERFACE()
i.a = 1
i.b = 2
i.c = 'hello'
x.myfunction(byref(i))
---- cl /LD /W4 x.c -> x.dll ----
#include <stdio.h>
struct interface
{
int a;
int b;
char* c;
};
__declspec(dllexport)
void myfunction(struct interface* iface)
{
printf("%d %d %s\n",iface->a,iface->b,iface->c);
}
-Mark
--
http://mail.python.org/mailman/listinfo/python-list