capi.py
import myModule as capi
print(capi.Message("こんにちは、日本"))
実行する
capi>python capi.py
こんにちは、日本
こんにちは、日本
capilib.c
# include <Python.h>
static PyObject* Message(PyObject* self, PyObject* args){
char* str;
if (!PyArg_ParseTuple(args, "s",&str)){
return NULL;
}
printf("%s\n",str);
return Py_BuildValue("s", str);
}
// Function Definition struct
static PyMethodDef myMethods[] = {
{ "Message", Message, METH_VARARGS, "Prints Message"},
{ NULL }
};
static struct PyModuleDef myModule = {
PyModuleDef_HEAD_INIT,"myModule","C API Module",-1,myMethods
};
PyMODINIT_FUNC PyInit_myModule(void){
return PyModule_Create(&myModule);
}
注目ポイント
char* str;
//引数の取り込み
if (!PyArg_ParseTuple(args, "s",&str)){
return NULL;
}
//戻り値の作成
return Py_BuildValue("s", str);
- PyArg_ParseTuple(args, "s",&str)は、引数 "s" string をstrに読み込む。
- 戻り値 "s"は、stringを表す。
- 例 https://docs.python.org/2.0/ext/buildValue.html