带指针结构的SWIG函数

时间:2016-07-18 13:11:39

标签: python c pointers struct swig

我是使用SWIG封装C共享库的新手。

我在使用python中的struct指针调用C函数时遇到问题。

我的档案:

ST_Param.h:

typedef struct {
       unsigned int* device_Address;
       ....
       ....
       unsigned int lock;
}ST_param_ST;      


unsigned char ST_Param_Initialize(ST_param_ST * ST_param, unsigned int device_Address);

ST_Param.c

......... Rest of file.............

unsigned char ST_Param_Initialize(ST_param_ST * ST_param, unsigned int device_Address){

    if(ST_param == NULL){
    .......... rest of funtion .......................

    return 0;
}

在ST_Param_Initialize内我确认指针存在,如果不相信

ST_Param.i

/* File : ST_Param.i */
%module ST_Param

%{
#define SWIG_FILE_WITH_INIT
#include "ST_Param.h"
%}




%include "typemaps.i" 
%include "ST_Param.h"

我编译并生成了一个.so文件。 在python中我可以导入一个库,但我不能调用ST_Param_Initialize,因为需要一个ST_Param_ST *参数:

ST_param_ST * error

我该怎么做?

注意:我无法修改.c和.h文件。只有一个.i文件。

在谷歌搜索,但我不明白该怎么做

由于 问候。

1 个答案:

答案 0 :(得分:2)

这样做基本上与在C中执行此操作相同:首先创建一个ST_param_ST结构,然后将其传递给初始化函数ST_Param_Initialize()。这是Python中的一个示例,假设您的模块名为ex

>>> import ex
>>> ST_Param = ex.ST_param_ST()
>>> ex.ST_Param_Initialize(ST_param, 42)