[C++-sig] How to use boost.python to wrap a class with a pure virtual function that has a 'void *' argument

James Whetstone jameswhetstone at comcast.net
Sat Mar 22 21:57:31 CET 2008

I'm new to Python and Boost.python and as the subject implies, I'm having trouble wrapping a C++ class that looks 
like this:

struct A
    virtual void handleMessage(void *message)=0;

To wrap this class, I've written the following code:

struct AWrapper : A, wrapper<A>
    void handleMessage(void *message)

class_<AWrapper, boost::noncopyable>("A")
    .def("handleMessage", pure_virtual(&A::handleMessage))

My python test code looks like this:

import APackage

class aclass(APackage.A):
 def handleMessage(msg) : print msg

But this code crashes when the handleMessage function is called in python (I 
think) because 'void *' cannot be marshalled.  Is there some way around 
this?  Also, since the void* object is intended to be "zero copy", I should 
probably convert the void * to a PyObject first and re-write my 
handleMessage to look like this:

    void handleMessage(void *message)
        int size = getMessageSize(message);

        PyObject *obj = PyBuffer_FromReadWriteMemory(message, size);


Has anyone done this type of thing?  I'm writing this code using MS Visual 
Studio 8 and if anyone can help, it would *very* appreciated.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20080322/3fe53fa8/attachment.htm>

More information about the Cplusplus-sig mailing list