2011-07-06 3 views
2

J'ai une structure comme celui-ci dans C:Comment accéder aux membres de syndicats imbriqués en utilisant SWIG?

struct print_arg { 
    struct print_arg  *next; 
    enum print_arg_type  type; 
    union { 
     struct print_arg_atom  atom; 
     struct print_arg_field  field; 
     struct print_arg_typecast typecast; 
     struct print_arg_flags  flags; 
     struct print_arg_symbol  symbol; 
     struct print_arg_func  func; 
     struct print_arg_string  string; 
     struct print_arg_op  op; 
     struct print_arg_dynarray dynarray; 
    }; 
}; 

J'utilise swig pour exporter un python reliures. En fait, le swing ne supporte pas les syndicats comme celui-ci imbriquées, mais avec une déclaration variable, il est ok:

union { 
    struct print_arg_atom  atom; 
    struct print_arg_field  field; 
    ... 
} value; 

Cette solution ne fait pas fits pour moi parce qu'il brise beaucoup de code C en utilisant cette structure (vous changez la moyen d'accéder aux membres du syndicat).

je pense à deux possibilités:

  1. Ajouter la déclaration de variable value, donc le problème rasade est résolu mais je besoin d'un moyen d'accéder à des membres du syndicat directement en C (pour ne pas casser beaucoup de fonctions). Connaissez-vous un ou plusieurs?

  2. Trouver un autre moyen dans swig. Connaissez-vous un ou plusieurs?

Toute autre solution est la bienvenue!

Répondre

0

Ma suggestion est d'alimenter le code C et SWIG deux fichiers d'en-tête différents. Essayez ce code:

union { 
    struct print_arg_atom  atom; 
    struct print_arg_field  field; 
    ... 
} /*SWIG_VALUE*/; 

Lorsque vous exécutez SWIG pour créer le code JNI, remplacez /*SWIG_VALUE*/ avec value. Cela ne devrait pas changer les adresses des champs mais cela rendra la structure plus accessible à SWIG.

+0

Merci pour la réponse, celui-ci fonctionne pour moi. –

Questions connexes