Ваша bar
функция имеет неверное определение, я думаю, вы имеете в виду, что это struct FOO_ *bar(int);
?
Код Python неверен в том смысле, что foo_parameter
никогда не объявляется, поэтому я не100% уверены, что вы хотите сделать.Я предполагаю, что вы хотите передать параметр вашего объявленного на Python foo
, который является экземпляром struct FOO_
, в C bar(int)
и получить указатель на struct FOO_
.
Youдля этого не нужен POINTER, сработает следующее:
#!/usr/bin/env python
from ctypes import *
class foo(Structure):
_fields_=[("i",c_int),
("b1",POINTER(c_int)),
("w1",POINTER(c_float))]
myclib = cdll.LoadLibrary("./libexample.so")
temp_foo = foo(1,None,None)
foovar = myclib.bar(temp_foo.i)
myclib.foo_write(foovar)
Поскольку CTypes обернет тип возвращаемого значения bar()
в указатель на структуру.