Posted on 2023/11/11, 6:07 PM By admin22
グルーコードが最近シリーズみたいになってきたので、Pythonもやっておきたいと思います。
PythonからC言語の呼び出しです。
環境)Pythn3.8 / WSL2 / Windows 11
demo.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include "/usr/include/python3.8/Python.h" int _add3(int a, int b, int c) { return a + b + c; } static PyObject* py_add3(PyObject* self, PyObject* args) { int r, a, b, c; if (!PyArg_ParseTuple(args, "iii", &a, &b, &c)){ return NULL; } r = _add3(a, b, c); return Py_BuildValue("i", r); } static PyMethodDef methods[] = { { "add3", py_add3, METH_VARARGS}, { NULL } }; static struct PyModuleDef module = { PyModuleDef_HEAD_INIT, "demoModule", "Demo Module", -1, methods }; PyMODINIT_FUNC PyInit_demoModule(void) { return PyModule_Create(&module); } |
demo_setup.py
1 2 3 4 |
from distutils.core import setup, Extension setup(name = 'demoModule', version = '0.0.1', \ ext_modules = [Extension('demoModule', ['demo.c'])]) |
demo.py
1 2 3 4 |
import demoModule c = demoModule.add3(1, 2, 3) print(c) |
パッケージにできるので、実用的です。
下記を参考にさせていただきました。他にリストの引数例など丁寧に書かれています。
参考)https://cpp-learning.com/python_c_api_step1/
Categories: 未分類