当参数使用typedef int时,如何调用swig python函数

时间:2017-10-09 08:20:32

标签: python swig typedef

我有一个C ++ API我试图用Python包装。在标题中有一个函数 Foo(TAPIINT32& iResult),其中 typedef int TAPIINT32 file.When我用的时候: 的 A = 0 mymodule.Foo(a)中 在python中调用它,我得到一个错误" TypeError:在方法' Foo',参数1的类型' TAPIINT32&' "。有人可以帮忙吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

当参数是输出并且预先存在的类型映射可以帮助时,需要告知SWIG。这是一个例子:

<强> api.h

typedef int TAPIINT32;
void Foo(TAPIINT32& iResult);

<强> api.cpp

#include "api.h"

void Foo(TAPIINT32& iResult)
{
    iResult = 5;
}

<强> api.i

%module api

%{
#include "api.h"
%}

%include <windows.i>
%apply int* OUTPUT {TAPIINT32t&};
%include "api.h"

%apply命令告诉SWIG将现有的typemap应用于指定的类型。在这种情况下,预先存在的int* OUTPUT类型映射将应用于所有TAPIINT32&参数。请注意,OUTPUT类型图禁止传递参数,而是将其作为附加返回值返回。

输出:

>>> import api
>>> api.Foo()
5