Python / SIP规范文件 - kwargs和NULL

时间:2016-09-29 04:37:21

标签: python-3.x python-sip

刚开始深入了解SIP。我有一个.h文件,其中包含以下公共方法:

void Allocate(int width, int height, int pitch, bool withHost, float *devMem = NULL, float* hostMem = NULL); 

我创建了一个相应的.sip文件:

  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 };

使用CMake,我有构建工作,可以将模块导入Python并可以调用构造函数(因此成功有限)。我也可以调用Allocate方法。不幸的是,在Python方面,我无法公开float *devMem=NULLfloat *hostMem=Null个参数。我已经阅读了SIP文档,并且没有任何注释因缺失而跳出来。

最终目标是将一个numpy数组(我相信的.data属性)传递给hostMem参数。

如何在SIP中暴露指针?那些带有默认值NULL参数的指针呢?

(Python 3.5,PyQt4,SIP 4.18.x)

2 个答案:

答案 0 :(得分:0)

我使用ctypes.POINTER

解决了这个问题

https://docs.python.org/3/library/ctypes.html#ctypes.POINTER

您可以为NULL指针传入None。

答案 1 :(得分:0)

您可以尝试" / In /"注释:

void Allocate(int width, int height, int pitch, bool withHost, float* devMem /In/ = NULL, SIP_PYOBJECT *hostMem /In/ = NULL) /KeywordArgs="All"/;

如果有效,请告诉我。