====== PythonからCの関数を呼び出す ====== 作成日: 2023-08-03 (木) [[https://youtu.be/wjUWODeNorI|第2回 Python/C APIに触れてみる]] ===== ソースコード ===== ==== setup.py ==== from setuptools import setup, Extension setup( name="toymath", ext_modules=[ Extension("toymath", ["toymathmodule.c"]), ] ) ==== toymathmodule.c ==== #define PY_SSIZE_T_CLEAN #include // 利用したいCの関数 static int add(int a, int b) { return a + b; } // addをラップした関数 static PyObject *toymath_add(PyObject *self, PyObject *args) { int a, b; if (!PyArg_ParseTuple(args, "ii", &a, &b)) { return NULL; } int ret = add(a, b); return PyLong_FromLong(ret); } // 公開する関数の情報 static PyMethodDef toymath_methods[] = { {"add", toymath_add, METH_VARARGS, "Add integer values."}, {NULL, NULL, 0, NULL}, }; // モジュールの情報 static PyModuleDef toymath_module = { PyModuleDef_HEAD_INIT, "toymath", "Toy mathematic functions.", -1, toymath_methods }; // モジュールの初期化 // impoortされたときに呼び出される // PyInit_xxxのxxxの部分は、モジュール名と一致させる PyMODINIT_FUNC PyInit_toymath(void) { return PyModule_Create(&toymath_module); }