Hello,
I've started to use Cython just yesterday, and I'm facing some
difficulties ;). I'm sorry to ask this on the dev list, but I didn't
found a user specific one...
I have a struct-dense C source code that defines the PDU of a network
protocol and functions to read/write from a buffer struct.
First, I don't know if I'm doing this the right way, but I had to define
by hand all my structs again on Cython to use them. I think it's the way
to do it, but I did feel like repeating myself over and over ;). Is
there any tool to create mappings like these automatically? (and handle
common cases like wrapping structs with inner structs, uint8_t *,
defining macros like #define VAL 1 as dummy enums, etc.). I saw some for
C++ (using gcc-xml) but I'm stuck with pure C. My main objective on
doing these bindings are to reuse the C code, having an efficient
implementation is secondary.
Second, at this extremely un-proficient time, for each of the structs on
my pdu.pyx I have something like this:
cdef class Msg1(Message):
cdef public ... (one declaration for each field present in the struct)
def __init__(self, ... (one keyword parameter for each field
provided by the struct):
self.fieldN = ... (this repeated for every field)
cdef void from_c(self, msg1_c_struct *msg1):
self.fieldN = msg1.fieldN (repeated for every field, with some
additional mappings in case the field is a struct)
And then I have a message parser that uses the C functions to read the
PDU and wrap it on Msg1:
class Parser:
def read_pdu(self, str_data):
cdef msg_struct msg
....
pdu_read(data, &msg)
....
if msg.header.type == MSG_1_TYPE:
return Msg1().from_c(&msg.data.msg_1)
Where msg.data.msg_1 is of type msg1_c_struct.
On that code, I get an error message saying that: 'Cannot convert
'msg1_c_struct *' to Python object' where I do the Msg1().from_c.
I don't understand why I'm getting the error. If I call a cdef function
instead of a cdef method, it works OK; but shouldn't I be able to call a
cdef method and passing a C type instead of a Python type? Otherwise, I
will need to add an external cdef function for each class to create the
object from the struct... I must be doing something wrong :).
Thanks, and sorry for the basic questions!
Best regards,
Santiago.
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev