将手工包装方法添加到Swig输出

时间:2012-08-29 23:01:19

标签: python swig

我有一个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表中公开它?

1 个答案:

答案 0 :(得分:1)

要排除函数被包装,请使用%native directive。

%module "test"

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

%{
  PyObject* DontWrapMeBro(PyObject* self, PyObject* args)
  {
    return PyString_AsString("Don't wrap me");
  }
%}