[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