[C++-sig] Not using virtual method
bob bob
bobismyname at tiscali.co.uk
Thu May 6 05:53:23 CEST 2004
Hello, I'm having difficulties concerning using callbacks that have been extended in python. I'm 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()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20040506/e0f160af/attachment.htm>
More information about the Cplusplus-sig
mailing list