2

我有一个 SWIG 模块,我想在其中添加一个手动方法。

%module frob

%inline %{

    int Foo(int x, int y) { return x+y; }

    PyObject* Bar(PyObject* self, PyObject* args) {
        return PyString_FromString("Hello from Bar");
    }
%}

但是,当我在它上面运行 swig 时swig -python frob.i,我看到 SWIG 实际上将 Foo 和 Bar 都包装为 _wrap_Foo、_wrap_Bar。

 SWIGINTERN PyObject *_wrap_Foo(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   // ...
   result = (int)Foo(arg1,arg2);
   // ...
 }    
 SWIGINTERN PyObject *_wrap_Bar(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   // ...
   result = (PyObject *)Bar(arg1,arg2);
   // ... 
}

如何告诉 SWIG 停止为我包装 Bar,而只是在 PyMethodDef 表中公开它?

4

1 回答 1

2

要从包装中排除函数,请使用 %native 指令。

%module "test"

/* Prototype */    
%native(DontWrapMeBro)
PyObject* DontWrapMeBro(PyObject* self, PyObject* args);

%{
  PyObject* DontWrapMeBro(PyObject* self, PyObject* args)
  {
    return PyString_AsString("Don't wrap me");
  }
%}
于 2012-08-30T22:59:57.010 回答