ユーザ用ツール

サイト用ツール


youtube:python-mixing-002

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
youtube:python-mixing-002 [2024/02/28 18:26] – 削除 - 外部編集 (不明な日付) 127.0.0.1youtube:python-mixing-002 [2024/02/28 18:26] (現在) – ↷ toybox:python-mixing-002 から youtube:python-mixing-002 へページを移動しました。 freemikan
行 1: 行 1:
 +====== PythonからCの関数を呼び出す ======
 +
 +作成日: 2023-08-03 (木)
 +
 +[[https://youtu.be/wjUWODeNorI|第2回 Python/C APIに触れてみる]]
 +===== ソースコード =====
 +
 +==== setup.py ====
 +
 +<file python>
 +from setuptools import setup, Extension
 +
 +setup(
 +    name="toymath",
 +    ext_modules=[
 +        Extension("toymath", ["toymathmodule.c"]),
 +    ]
 +)
 +</file>
 +
 +==== toymathmodule.c ====
 +
 +<file c>
 +#define PY_SSIZE_T_CLEAN
 +#include <Python.h>
 +
 +// 利用したい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);
 +}
 +</file>
  

特に明示されていない限り、本Wikiの内容は次のライセンスに従います: CC0 1.0 Universal
CC0 1.0 Universal Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki