[PySide] Shiboken: Binding a function returning a pointer
Alexandre gauthier
alexandre.gauthier-foichat at inria.fr
Fri Oct 24 00:03:39 CEST 2014
Hi,
I have the following C++ function that is going to be binded to Python:
Effect
Effect::getInput(int inputNumber) const
{
boost::shared_ptr<Natron::Node> node = _node->getInput(inputNumber);
return Effect(node);
}
The return value has a bool isNull() const method to determine if the object is valid or not.
In the type system I do the following:
<object-type name="Effect">
<modify-function signature="getInput(int)const">
<modify-argument index="return">
<replace-type modified-type="PyObject" />
</modify-argument>
<inject-code class="target" position="beginning">
%RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(%ARGUMENT_NAMES);
if (%0.isNull()) {
Py_INCREF(Py_None);
%PYARG_0 = Py_None;
} else {
%PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0);
}
</inject-code>
</modify-function>
</object-type>
Which is expanded in c++ to :
// Begin code injection
Effect cppResult = cppSelf->getInput(cppArg0);
if (cppResult.isNull()) {
Py_INCREF(Py_None);
pyResult = Py_None;
} else {
///Crash in the following line
pyResult = Shiboken::Conversions::copyToPython((SbkObjectType*)SbkNatronEngineTypes[SBK_EFFECT_IDX], &cppResult);
}
// End of code injection
Unfortunately the code crashes in the indicated line above when invoking the code from the Python interpreter. Any idea on what I’m doing wrong ?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20141024/a300ec85/attachment.html>
More information about the PySide
mailing list