[PyQt] SIP Pointer Confusion

Jay L. jlaura at asu.edu
Fri Sep 30 02:58:14 BST 2016


Phil,

Super helpful and gets me rolling again.  I definitely was not groking many
of the annotations so that point is awesome.

Thanks!
J

On Thu, Sep 29, 2016 at 5:58 PM, Phil Thompson <phil at riverbankcomputing.com>
wrote:

> On 30 Sep 2016, at 1:43 am, Jay L. <jlaura at asu.edu> wrote:
> >
> > Just starting to dig into SIP. I have a .h file that contains the
> following public method:
> >
> > void Allocate(int width, int height, int pitch, bool withHost, float
> *devMem = NULL, float* hostMem = NULL);
> >
> >  have created a corresponding .sip file:
> >
> > 1 //SIP wrapper for CUDA Image
> > 2
> > 3 class CudaImage
> > 4 {
> > 5 %TypeHeaderCode
> > 6 #include "cudaImage.h"
> > 7 %End
> > 8
> > 9 public:
> > 10 CudaImage();
> > 11
> > 12 void Allocate(int width, int height, int pitch, bool withHost, float
> *devMem=NULL, float *hostMem=NULL) /KeywordArgs="All"/;
> > 13 double Download();
> > 14
> > 15
> > 16 int width;
> > 17 int height;
> > 18 int pitch;
> > 19 };
> >
> > Using CMake, I have the build working, can import the module into Python
> and can call the constructor (so limited success). I can also call the
> Allocate method. Unfortunately, on the Python side, I can not get the float
> *devMem=NULL or float *hostMem=Nullarguments exposed. I have been over the
> SIP documentation and no Annotations are leaping out as missing.
> >
> > The ultimate goal is to pass a numpy array (.data attribute I believe)
> to the hostMemargument.
> >
> > How does one go about exposing pointers in SIP? What about pointers with
> a default, NULL, argument?
>
> Pointers to fundamental types are (by default) treated as a way to return
> a value from the method and not pass a value to it - see the /In/
> annotation.
>
> You should then hit the problem that you will have to provide hand-written
> code to handle those arguments because SIP doesn't know how to convert them
> to a Python object. You probably need to declare the types as SIP_PYOBJECT
> and handle the conversion in %MethodCode. Alternatively if that is a common
> situation in your API then consider defined a mapped type.
>
> If numpy arrays support the buffer protocol then you should look at
> exploiting that. You should also look at sip.array and sipConvertToArray().
>
> Phil
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20160929/5f2cd921/attachment-0001.html>


More information about the PyQt mailing list