[PyQt] converting SWIG objects to SIP objects
Blaine Bell
blaine.bell at schrodinger.com
Wed Sep 1 16:00:30 BST 2010
I was able to write a SIP function that takes a SWIG object, converts it
to a SIP object, as well as a function that converts a SIP object back
to a SWIG object:
The object I have implemented in SIP and SWIG is called "ChmMol":
ChmMol *convertChmMoltoSIP(SIP_PYOBJECT);
%MethodCode
if (!SWIGTYPE_p_ChmMol){
SWIG_init();
}
if ((SWIG_ConvertPtr(a0,(void **) &sipRes, SWIGTYPE_p_ChmMol, 0 ))
== -1) return NULL;
%End
SIP_PYOBJECT convertChmMoltoSWIG(ChmMol *);
%MethodCode
if (!SWIGTYPE_p_ChmMol){
SWIG_init();
}
sipRes = SWIG_NewPointerObj(a0, SWIGTYPE_p_ChmMol, 0);
%End
In order to do this, I needed to include the c++ file that was generated
by swig executable running on the SWIG .i file. Including that c++ file
(in the "%ModuleCode") instantiates an entirely new SWIG dictionary
inside my SIP DLL that needs to be initialized (hence, the SWIG_init()
call).
My question to the SIP experts: is there a way to allow SIP to allow
SWIG or SIP objects as arguments that have a specific type? Is there a
Directive or Annotation that allows me to write a conversion, so I can
override the conversion from the Python object to C++ object for each type?
Thanks in advance,
Blaine
More information about the PyQt
mailing list