A Simple C Extension Module
At least that’s the short story; we need to turn to some code to make this more concrete. C types generally export a C module with a constructor function. Because of that (and because they are simpler), let’s start off by studying the basics of C module coding with a quick example.
When you add new or existing C
components to Python, you need to code an interface (or
“glue”) logic layer in C that handles cross-language
dispatching and data translation. The C source file in Example 19-1 shows how to code one by hand. It implements a
simple C extension module named hello
for use in
Python scripts, with a function named message
that
simply returns its input string argument with extra text prepended.
Example 19-1. PP2E\Integrate\Extend\Hello\hello.c
/******************************************************************** * A simple C extension module for Python, called "hello"; compile * this into a ".so" on python path, import and call hello.message; ********************************************************************/ #include <Python.h> #include <string.h> /* module functions */ static PyObject * /* returns object */ message(PyObject *self, PyObject *args) /* self unused in modules */ { /* args from python call */ char *fromPython, result[64]; if (! PyArg_Parse(args, "(s)", &fromPython)) /* convert Python -> C */ return NULL; /* null=raise exception */ else { strcpy(result, "Hello, "); /* build up C string */ strcat(result, fromPython); /* add passed ...
Get Programming Python, Second Edition now with O’Reilly online learning.
O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.