将一些代码行插入到 SWIG Python 生成的函数中

Insert some lines of code into SWIG Python generated function

我使用 swig 为我的 C++ 库生成 Python 绑定。我想导出一个方法,其中 return 是一个数字和一个 numpy 数组。 生成包装代码非常容易。

%apply (uint8_t** ARGOUTVIEWM_ARRAY3, int* DIM1, int* DIM2, int* DIM3) {(uint8_t** frame, int *dim1, int *dim2, int *dim3)}

int get_frame(uint8_t** frame, int *dim1, int *dim2, int *dim3);

但是,get_frame() 在某些情况下会将帧指针设置为 NULL,我想 Python 方法将 return None 而不是 numpy 数组.目前,如果 frame 为 NULL,生成的代码将引发系统错误。
我的解决方案是在生成的函数 _wrap_get_frame.

中插入一些代码行
if (*arg1 == NULL)
{
    Py_INCREF(Py_None);
    resultobj = SWIG_Python_AppendOutput(resultobj, Py_None);
    return resultobj;
}

我已经测试了这个新功能,它有效。
如何让 swig 自动执行此更改?
谢谢!

大家可以看看Henri Menke的评论。这是我的解决方案:

我添加了一个异常处理程序以将我的代码插入函数调用下方。

%exception get_frame {
  errno = 0;
  $action
  if (errno != 0)
  {
     resultobj = SWIG_From_int((int)(result));
     Py_INCREF(Py_None);
     resultobj = SWIG_Python_AppendOutput(resultobj, Py_None);
     return resultobj;
  }
}

从生成的代码中使用变量 resultobj 不是通用的解决方案,但它适用于我的 SWIG 4.0。