使用SWIG%应用重命名C struct属性

时间:2011-12-12 15:44:09

标签: swig

我的SWIG接口文件中有以下结构,因此我的sample.h头文件。我假设从这个结构中的sockaddr,ios_boolean和unsigned char定义是我得到下面生成的类的原因。如果我知道在Java端的ios_boolean和unsigned char map上的类型有没有办法使用%apply来摆脱生成的指针类?我试过%apply int {ios_boolean};但后来我得到了一个SWIGTYPE_p_boolean.java。有什么想法吗?

%rename (Sample) sample_details_t_;
typedef struct sample_details_t_ {               
    ios_boolean                   is_allowed;           
    unsigned char                 mac[11];        
 } sample_t;


 generates:
 SWIGTYPE_p_unsigned_char.java
 SWIGTYPE_p_ios_boolean.java

例外:

 [exec] ewapi_wrap.c:982: error: `true' undeclared (first use in this function)
 [exec] ewapi_wrap.c:982: error: (Each undeclared identifier is reported only once
 [exec] ewapi_wrap.c:982: error: for each function it appears in.)
 [exec] ewapi_wrap.c:982: error: `false' undeclared (first use in this function

1 个答案:

答案 0 :(得分:2)

你可能想做类似的事情:

%include <arrays_java.i>
%rename (Sample) sample_details_t_;
%apply bool { ios_boolean };
typedef struct sample_details_t_ {               
    ios_boolean                   is_allowed;           
    unsigned char                 mac[11];        
 } sample_t;

这将mac包装为short[](对数组大小有约束),将is_allowed包装为Java boolean并生成这些文件:

  

Sample.java test.java testJNI.java

确保删除旧版SWIG界面中存在的旧SWIGTYPE_*.java文件,如果您执行javac *.java之类的操作,它们将不会自动删除,也可能无法编译。