Pythonの拡張モジュール勉強メモ1
http://docs.python.org/ext/intro.html
"spam"という作るときには慣例でその実装をするCファイルを"spammodule.c"とつける。
でもモジュール名がある程度長いときには、その最後に".c"をつけただけのファイル名になる。
"spammify" -> spammify.c
ファイルのはじめは
#include <Python.h>
とやってPython APIを取り込む。他の標準ヘッダより先に書く!
で呼び出す関数を書く。
関数は必ず2つの引数持ち、名前は慣例でselfとargs。
static PyObject *
spam_system(PyObject *self, PyObject *args)
{
...
組み込みメソッド作るときだけselfを使う。ただの関数のときにはselfはNULLポインタ。
argsはその名の通り引数を指すタプルへのポインタ。
各要素が呼び出し側の引数リストに対応してる。
これはPython ObjectなのでCで使える形に変換しないといけない。
その変換に使うのがPyArg_ParseTuple()。
モジュール内で何らかのエラーが起きたときは例外を投げるのも慣例。
グローバルに定義されてる領域に例外の理由をセットしてreturn。
値を返す関数を作っている場合は、
PyArg_ParseTuple()でCのデータ型を得て、好きな処理をして
結果を呼び出し元に返すという流れ。
この際returnする値はまたPython Objectに戻さないといけないので、
Py_BuildValue()などを使う。
戻り値がない関数だったら
Py_INCREF(Py_None);
return Py_None;
とやる。
続く。