[C++-sig] Not using virtual method

Pierre Barbier de Reuille pierre.barbier at cirad.fr
Thu May 6 09:48:11 CEST 2004


In your callback wrapper you have to be sure, before you call any
Python, you hold the Python Interpreter. If you do not, you're program
will crash !

Le jeu 06/05/2004 à 05:53, bob bob a écrit :
> Hello, Im having difficulties concerning using callbacks that have
> been extended in python. Im using the windows video API DirectShow to
> play video to a screen through a transform method. The problem occurs
> when the Transform method is called from an object extended in python
> as a callback, not when called explicitly. How do I represent this
> functionality and prevent the python interpreter from crashing? I
> would like to try creating a thin wrapper to allow play to allow
> threads,
> 
> how can you do this?
> 
>  
> 
> Many Thanks,
> 
> Richard
> 
>  
> 
> // Cut down version of the C++ code
> 
>  
> 
> class Callback
> 
> {
> 
>             virtual void Transform() = 0;
> 
> }
> 
>  
> 
> class Player
> 
> {
> 
>             Player(Callback *);
> 
>             void Play();        // Play the video to the screen,
> returns allowing video to continue play
> 
> }
> 
>  
> 
> class Callback_Wrap : public Callback
> 
> {
> 
>             Callback_Wrap(PyObject *obj) : self(obj) {}
> 
>             virtual Transform() {call_method<void>(self, Transform);}
> 
>             PyObject *self;
> 
> }
> 
>  
> 
> BOOST_PYTHON_MODULE(MyVideo)
> 
> {
> 
>             class_<Callback, boost::noncopyable,
> boost::shared_ptr<Callback_Wrap> >(Callback)
> 
>                         .def(Transform, &Callback::Transform)
> 
>                         ;
> 
>  
> 
>             class_<Player>(Player, init<Calback *>())
> 
>                         .def(Play, &Player::Play)
> 
>                         ;
> 
> }
> 
>  
> 
>  
> 
> # Example python use
> 
>  
> 
> from MyVideo import *
> 
>  
> 
> class My_Callback(Callback):
> 
>             def Transform(self):
> 
>                         print Hello, My_Callback here!
> 
>  
> 
> a = My_Callback()
> 
> b = Player(a)
> 
> a.Play()
> 
> 
> 
> ______________________________________________________________________
> _______________________________________________
> C++-sig mailing list
> C++-sig at python.org
> http://mail.python.org/mailman/listinfo/c++-sig
-- 
Pierre Barbier de Reuille

INRA - UMR Cirad/Inra/Cnrs/Univ.MontpellierII AMAP
Botanique et Bio-informatique de l'Architecture des Plantes
TA40/PSII, Boulevard de la Lironde
34398 MONTPELLIER CEDEX 5, France

tel   : (33) 4 67 61 65 77    fax   : (33) 4 67 61 56 68 
-- 
Pierre Barbier de Reuille

INRA - UMR Cirad/Inra/Cnrs/Univ.MontpellierII AMAP
Botanique et Bio-informatique de l'Architecture des Plantes
TA40/PSII, Boulevard de la Lironde
34398 MONTPELLIER CEDEX 5, France

tel   : (33) 4 67 61 65 77    fax   : (33) 4 67 61 56 68 





More information about the Cplusplus-sig mailing list