Переименование свойств структуры C с использованием SWIG% - PullRequest
1 голос
/ 12 декабря 2011

У меня есть структура ниже в моем файле интерфейса SWIG и, следовательно, мой файл заголовка sample.h. Я предполагаю, что определения sockaddr, ios_boolean и unsigned char из этой структуры - причина, по которой я получаю сгенерированные ниже классы. Если я знаю, что тип на этом ios_boolean и unsigned char сопоставляется со стороной Java, есть ли способ использовать% 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 Ответ

2 голосов
/ 17 декабря 2011

Возможно, вы захотите сделать что-то вроде:

%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 как boolean на стороне Java ирезультаты в этих файлах:

Sample.java test.java testJNI.java

Убедитесь, что вы удалили все старые SWIGTYPE_*.java файлы, которые лежат в более старых версияхваш интерфейс SWIG, они не будут удалены автоматически и могут не скомпилироваться, если вы сделаете что-то вроде javac *.java.

...