2016-07-18 106 views
1

我使用SWIG封裝了C共享庫。具有指針的SWIG函數結構

我有問題在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文件。

在谷歌搜索,但我不知道該怎麼辦呢

感謝 問候。

回答

2

你這樣做實際上你做它在C同樣的方式:首先創建一個ST_param_ST結構,然後把它傳遞給初始化函數ST_Param_Initialize()。假設您的模塊名爲ex,以下是Python中的一個示例:

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