<div dir="ltr">Phil, <div><br></div><div>Super helpful and gets me rolling again.  I definitely was not groking many of the annotations so that point is awesome.</div><div><br></div><div>Thanks!</div><div>J</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Sep 29, 2016 at 5:58 PM, Phil Thompson <span dir="ltr"><<a href="mailto:phil@riverbankcomputing.com" target="_blank">phil@riverbankcomputing.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On 30 Sep 2016, at 1:43 am, Jay L. <<a href="mailto:jlaura@asu.edu">jlaura@asu.edu</a>> wrote:<br>
><br>
> Just starting to dig into SIP. I have a .h file that contains the following public method:<br>
><br>
> void Allocate(int width, int height, int pitch, bool withHost, float *devMem = NULL, float* hostMem = NULL);<br>
><br>
>  have created a corresponding .sip file:<br>
><br>
> 1 //SIP wrapper for CUDA Image<br>
> 2<br>
> 3 class CudaImage<br>
> 4 {<br>
> 5 %TypeHeaderCode<br>
> 6 #include "cudaImage.h"<br>
> 7 %End<br>
> 8<br>
> 9 public:<br>
> 10 CudaImage();<br>
> 11<br>
> 12 void Allocate(int width, int height, int pitch, bool withHost, float *devMem=NULL, float *hostMem=NULL) /KeywordArgs="All"/;<br>
> 13 double Download();<br>
> 14<br>
> 15<br>
> 16 int width;<br>
> 17 int height;<br>
> 18 int pitch;<br>
> 19 };<br>
><br>
> 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.<br>
><br>
> The ultimate goal is to pass a numpy array (.data attribute I believe) to the hostMemargument.<br>
><br>
> How does one go about exposing pointers in SIP? What about pointers with a default, NULL, argument?<br>
<br>
</div></div>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.<br>
<br>
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.<br>
<br>
If numpy arrays support the buffer protocol then you should look at exploiting that. You should also look at sip.array and sipConvertToArray().<br>
<span class="HOEnZb"><font color="#888888"><br>
Phil</font></span></blockquote></div><br></div>