Как вызвать функцию C++ из Python?
Это вопрос о встраивании скриптового языка в C++. С Lua и JavaScript я разобрался легко, а вот как вызывать функции написанные в C++ из Python так и не смог понять. Помогите пожалуйста, вот код на lua и JavaScript. Как такое можно сделать через CPython?
#include "duktape.h"
static duk_ret_t test(duk_context *ctx)
{
printf("test");
return 0;
}
int main()
{
duk_context*ctx=duk_create_heap_default();
duk_push_c_function(ctx,test,DUK_VARARGS);
duk_put_global_string(ctx, "test");
duk_eval_string(ctx,"test();");
return 0;
}
#include "lua.hpp"
int test(lua_State*l)
{
printf("test");
return 0;
}
int main()
{
lua_State*l=luaL_newstate();
lua_register(l,"test",test);
luaL_dostring(l,"test()");
return 0;
}
Ответы (1 шт):
Автор решения: Chorkov
→ Ссылка
Если вам нужен минимальный пример embediing-python, с декларацией функций из c++ в python, именно через интерфейс низкого уровня, то вот:
static PyObject * test(PyObject *, PyObject *)
{
printf("test");
return Py_None ; //
}
static PyMethodDef declare_test[] = {
{"test", (PyCFunction)test, METH_NOARGS, PyDoc_STR("print 'test'.")},
{NULL, NULL}
};
int main(int argc, char *argv[])
{
wchar_t *program = Py_DecodeLocale(argv[0], NULL);
Py_SetProgramName(program);
Py_Initialize();
PyObject * mainModule = PyImport_ImportModule("__main__");
PyObject * mainModule_dict = PyObject_GetAttrString( mainModule, "__dict__" );
PyModule_AddFunctions( mainModule, declare_test );
PyRun_SimpleString( "test()\n");
Py_DECREF(mainModule_dict);
Py_DECREF(mainModule);
Py_FinalizeEx();
PyMem_RawFree(program);
return 0;
}
Однако, если нужно проэкспортировать больше пары функций, и из С++ (а не С), то рекомендую, вместо CPython воспользоваться обертками интерфейса более высокого уровня. Например, boost.python.