|
Boost : |
From: David GD Wilson (firestar_at_[hidden])
Date: 2002-06-01 14:01:25
Hi,
I am hoping someone has managed to get this problem working before and
can give me some pointers as to how to accomplish the task.
What I am trying to do is have a class in C++ that is mirrored in
python. This means that each instance of a class that is created will
have a python class created along with it and that python instance can
call into the c++ instance and vice versa.
i.e
CTest = c++ class
PTest = python class
CTest ca - ca references pa so it can call methods implemented in python
PTest pa - pa references ca so it can call methods implemented in c++
I have managed to create the python class from c++ and export the c++
class using boost.python however I am having great difficulty in making
the two classes reference each other - I get damaged memory blocks, this
suggests that I am doing something incorrectly!
Here is a snippet of the code I am using to make the python class
reference the c++ class:
// create argument for python class - the c++ instance pm
PyObject *pArgs = Py_BuildValue( "(O&)",
BOOST_PYTHON_CONVERSION::to_python,
static_cast< CTest* >( pm ) );
if( !pArgs )
{
LogPyError();
return false;
}
// get an instance of the class PTest
pInstance = PyEval_CallObject( pClass, pArgs );
if( !pInstance )
{
LogPyError();
return false;
}
Py_DECREF( pArgs ); // program terminates here due to damaged memory
And the to_python function is:
BOOST_PYTHON_BEGIN_CONVERSION_NAMESPACE
PyObject* to_python( CTest *pTestIn )
{
return python_extension_class_converters< CTest
>::smart_ptr_to_python( pTestIn );
}
PyObject* to_python( const CTest *pTestIn )
{
return to_python( const_cast< CTest* >( pTestIn ) );
}
BOOST_PYTHON_END_CONVERSION_NAMESPACE
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk