LINUX.ORG.RU

Как вызвать Python функцию из С++?

 ,


0

2

Схематический код:

#python
def callback(data):
    print(data)

cpplib.function(callback)

#c++
void function(py_callback) {
   for(int i = 0; i <= 1000; ++i) {
      if (i % 5 == 0) py_callback(i);
   }
}

cpplib - это обертка над питоновским сtypes.

Как видно из питона вызывается функция из С библиотеки, которая при возникновении определенного события вызывает функцию, переданную в ей в качестве аргумента.

Перед тем как задавать вопрос я погуглил и нарыл, что реально вызвать python функцию из С. Правда ничего не написано о моем варианте. Конечно, я могу попытаться накрутить в С коде кучу враперов для пайтона, но С код представляет собой библиотеку, которую хотелось бы использовать не только в пайтоне, а в любом другом языке.

Как быть?



Последнее исправление: pisipu (всего исправлений: 1)

На вопрос не отвечу, но с++ кодирует название функции.
К примеру у меня получилось для void function()

$ strings a.out  | grep  funct
_Z8functionv

Нужно сделать так (только добавить #ifdef cpp)
extern "C" {
	void function();
}
void function() {} 
То название функции кодируется верно.
$ strings a.out | grep funct
function

ymuv ★★★★
()
Последнее исправление: ymuv (всего исправлений: 3)
Ответ на: комментарий от tailgunner

да я рою. Есть идея: может как-то можно получить адрес питон функции в памяти, и уже его как-то передавать в С?. Как это сделать и вызвать потом по нем функцию с аргументами - я хз.

pisipu
() автор топика

PyObject_Call?

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.