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