#include <Python.h>
#pragma comment(lib, "python27.lib")
static PyObject *my_callback = NULL; // def func(a):
static PyObject *
my_set_callback(PyObject *dummy, PyObject *args)
{
PyObject *result = NULL;
PyObject *temp;
if (PyArg_ParseTuple(args, "O:set_callback", &temp)) {
if (!PyCallable_Check(temp)) {
PyErr_SetString(PyExc_TypeError, "parameter must be callable");
return NULL;
}
Py_XINCREF(temp);
Py_XDECREF(my_callback);
my_callback = temp;
Py_INCREF(Py_None);
result = Py_None;
}
return result;
}
static PyObject *
my_call_it(PyObject *dummy, PyObject *args)
{
int arg;
PyObject *arglist;
PyObject *result;
arg = 123;
arglist = Py_BuildValue("(i)", arg);
result = PyObject_CallObject(my_callback, arglist);
Py_DECREF(arglist);
if (result == NULL)
return NULL;
Py_DECREF(result);
Py_RETURN_NONE; // Py_INCREF(Py_None); return Py_None;
}
static PyMethodDef SpamMethods[] = {
{"set_callback", my_set_callback, METH_VARARGS, "set a callback"},
{"call_it", my_call_it, METH_VARARGS, "call it"},
{NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC
initspam(void)
{
Py_InitModule("spam", SpamMethods);
}
评论