我是使用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 *参数:
我该怎么做?
注意:我无法修改.c和.h文件。只有一个.i文件。
在谷歌搜索,但我不明白该怎么做
由于 问候。
答案 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)