Need help with C extension module

Robert Kern rkern at
Thu Sep 8 00:38:51 CEST 2005

chris wrote:
> This is my first attempt at undertaking a C extension module.  I want
> to wrap an existing C library so I can call the functions from Python.
> There are only two functions I'm interested in calling.  I did mess
> with Pyrex a bit and Swig, to no avail, so I turned to doing it by
> hand.  Using the example in Programming Python, I did get the easier of
> the two functions working--only takes a string parameter.  I'm stuck
> now on the other function and not sure how to wrap it, because it
> involves some structs.  Here's a simplified version of the C:
> struct In
> {
>   int x;
>   char* s;
>   ... (only primitive data types)
> };
> struct Out
> {
>   int y;
>   char* s;
>   ... (only primitive data types)
> };
> Out* func(In* x, Out* y);
> So the function takes pointers to the two structs, and fills out the
> output struct and also returns the pointer to it.  I would envision the
> Python looking like
> in = In()
> in.y = 1
> in.s = "abc"
> ...
> out = func(in)
> maybe?  Just no idea how to deal with the structs in the C extension
> module code.

It's *not* a straightforward task. You have to define an extension type. See

However, Pyrex really does make defining extension types much, much
easier. I highly suggest trying to debug your Pyrex code before learning
all of the boilerplate necessary to create extension types in pure C.

Robert Kern
rkern at

"In the fields of hell where the grass grows high
 Are the graves of dreams allowed to die."
  -- Richard Harter

More information about the Python-list mailing list