Thread View: pl.comp.lang.python
1 messages
1 total messages
Started by Marek
Fri, 06 Aug 2010 09:16
[boost::Python] Wołanie obiektów Pythona w modułach C++
Author: Marek
Date: Fri, 06 Aug 2010 09:16
Date: Fri, 06 Aug 2010 09:16
52 lines
2241 bytes
2241 bytes
Witam,
Pytanie kierowane jest do osób, które korzystały z boost::Python.
Otóż to czego potrzebuję, to moduł napisany w C++ i boost.Python który
będzie komunikował się z obiektami zdefiniowanymi oraz utworzonymi w
Pythonie. Moduł w C++ mam, definicję klasy w Pythonie także.
Teraz chciałbym móc wykonać coś takiego (poziom kodu Python w którym po
prostu wykorzystuję kod z C++ i inne moduły Pythona):
#v+
m=cppmodule.cppclass()()
t=pythonmodule.pythonclass()
m.register_callback(t)
m.start()
#v-
Dla testów w pythonmodule.pythonclass zrobiłem testową metodę (nazwijmy
ją 'p') która wypisuje zwykły hardcodowany string.
W C++ dodałem metodę register_callback(boost::python::object& obj) :
#v+
this->callback = obj;
return;
#v-
Następnie w tym samym obiekcie, gdzie został przypisany
boost::python::object wywołuję kod test(), który chce wykonać metodę
obiektu callback:
#v+
void cppobject::test()
{
callback.attr("p")();
return;
}
#v-
Wtedy też program wysypuje się a ja dostaję Segmentation fault.
Dodam, że dla testów w metodzie register_callback sprawdziłem, czy można
tak metodę wywołać i tam wszysko działało sprawnie i bez problemów.
Niczego w pamięci nie usuwam (del w Pythonie, ani delete w C++), a
zmienna callback jest składową globalnego obiektu który żyje przez okres
pracy aplikacji i jest głęboko ukryty.
Pytanie: Gdzie tkwi haczyk?
pozdrawiam
Marek
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads