🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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++
#27622
Author: Marek
Date: Fri, 06 Aug 2010 09:16
52 lines
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