https://docs.python.org/3/c-api/arg.html
#include "python.h"
static PyObject *
extest_circle(PyObject *self, PyObject *args)
{
int r;
int s;
if (!PyArg_ParseTuple(args, "i", &r)) // 매개변수 값을 분석하고 지역변수에 할당 시킵니다.
return NULL;
s = 3.141592*r*r;
return Py_BuildValue("i", s); //python type conversion..
}
static PyObject *
extest_hap(PyObject *self, PyObject *args)
{
int a, b;
int sum;
if (!PyArg_ParseTuple(args, "ii", &a, &b)) // 매개변수 값을 분석하고 지역변수에 할당 시킵니다.
return NULL;
sum = a + b;
return Py_BuildValue("i", sum); //python type conversion..
}
static PyObject *
extest_strlen(PyObject *self, PyObject *args)
{
const char* str = NULL;
int len;
if (!PyArg_ParseTuple(args, "s", &str)) // 매개변수 값을 분석하고 지역변수에 할당 시킵니다.
return NULL;
len = strlen(str);
return Py_BuildValue("i", len); //python type conversion..
}
static PyMethodDef extestMethods[] = {
{ "strlen", extest_strlen, METH_VARARGS, "count a string length." },
{ "hap", extest_hap, METH_VARARGS, "sum two" },
{ "circle", extest_circle, METH_VARARGS, "area of circle" },
{ NULL, NULL, 0, NULL } // 배열의 끝을 나타냅니다.
};
static struct PyModuleDef extestmodule = {
PyModuleDef_HEAD_INIT,
"extest", // 모듈 이름
"It is test module.", // 모듈 설명을 적는 부분, 모듈의 __doc__에 저장됩니다.
-1,
extestMethods
};
PyMODINIT_FUNC
PyInit_extest(void)
{
return PyModule_Create(&extestmodule); // 공유 메모리 영역에 dll을 적재한다.
}
#include "python.h"
static PyObject *
extest_circle(PyObject *self, PyObject *args)
{
int r;
int s;
if (!PyArg_ParseTuple(args, "i", &r)) // 매개변수 값을 분석하고 지역변수에 할당 시킵니다.
return NULL;
s = 3.141592*r*r;
return Py_BuildValue("i", s); //python type conversion..
}
static PyObject *
extest_hap(PyObject *self, PyObject *args)
{
int a, b;
int sum;
if (!PyArg_ParseTuple(args, "ii", &a, &b)) // 매개변수 값을 분석하고 지역변수에 할당 시킵니다.
return NULL;
sum = a + b;
return Py_BuildValue("i", sum); //python type conversion..
}
static PyObject *
extest_strlen(PyObject *self, PyObject *args)
{
const char* str = NULL;
int len;
if (!PyArg_ParseTuple(args, "s", &str)) // 매개변수 값을 분석하고 지역변수에 할당 시킵니다.
return NULL;
len = strlen(str);
return Py_BuildValue("i", len); //python type conversion..
}
static PyMethodDef extestMethods[] = {
{ "strlen", extest_strlen, METH_VARARGS, "count a string length." },
{ "hap", extest_hap, METH_VARARGS, "sum two" },
{ "circle", extest_circle, METH_VARARGS, "area of circle" },
{ NULL, NULL, 0, NULL } // 배열의 끝을 나타냅니다.
};
static struct PyModuleDef extestmodule = {
PyModuleDef_HEAD_INIT,
"extest", // 모듈 이름
"It is test module.", // 모듈 설명을 적는 부분, 모듈의 __doc__에 저장됩니다.
-1,
extestMethods
};
PyMODINIT_FUNC
PyInit_extest(void)
{
return PyModule_Create(&extestmodule); // 공유 메모리 영역에 dll을 적재한다.
}
---------------------
import extest n = extest.strlen("abc") s = extest.hap(10, 20) print(n, s) print(extest.circle(10))
댓글 없음:
댓글 쓰기