我有一个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表中公开它?
答案 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");
}
%}