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

2024-04-25 19:47:59 发布

您现在位置:Python中文网/ 问答频道 /正文

<>我有一个C++ API试图打包Python。那里是一个函数Foo(TAPIINT32&;iResult),其标题中包含typedef int TAPIINT32文件。什么时候我使用: a=0我的模块。Foo(a) 在python中调用它时,我得到一个错误“TypeError:in method'Foo',argument 1的类型为'TAPIINT32&;'”。有人能帮忙吗?非常感谢!你知道吗


Tags: 模块文件函数inapi标题foo错误
1条回答
网友
1楼 · 发布于 2024-04-25 19:47:59

SWIG需要被告知何时参数是输出,并有预先存在的类型映射来帮助。举个例子:

api.h

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

api.cpp公司

#include "api.h"

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

api.i

%模块api

%{
#include "api.h"
%}

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

%apply命令告诉SWIG将现有的typemap应用于指定的类型。在本例中,预先存在的int* OUTPUT类型映射应用于所有TAPIINT32&参数。请注意,输出typemap不需要传递参数,而是将其作为附加返回值返回。你知道吗

输出:

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

相关问题 更多 >