Pythonからcallされるソースコード『py_add.c』

// #include "Python.h" #include "../../../include/python3.6m/Python.h" // Pure C/C++ function 'c_add' int c_add(int a, int b) { return a + b; } // Wrapped C/C++ function 'pyadd' static PyObject* pyadd(PyObject* self, PyObject* args) { int a, b, c; // Decide variable type (int, int) if (!PyArg_ParseTuple(args, "ii", &a, &b)){ return NULL; } c = c_add(a, b); // return c_add computed add number return Py_BuildValue("i", c); } // addModule definition(python's name) static PyMethodDef addMethods[] = { { "c_add", pyadd, METH_VARARGS}, { NULL } }; // addModule definition struct static struct PyModuleDef addModule = { PyModuleDef_HEAD_INIT, "addModule", "Python3 C API Module(Sample 2)", -1, addMethods }; // Initializes addModule PyMODINIT_FUNC PyInit_addModule(void) { return PyModule_Create(&addModule); }

setup.py

from distutils.core import setup, Extension setup(name = 'addModule', version = '1.0.0', \ ext_modules = [Extension('addModule', ['py_add.c'])])

『py_add.c』を呼ぶソースコード『add.py』

import addModule c = addModule.c_add(2, 3) print(c)