2010-05-05 1 views
0

Nous utilisons une bibliothèque C dans notre projet Java. Il y a quelques années, un autre développeur qui a pris sa retraite il y a quelques années (comme toujours) a créé tous les emballages pour nous. Les wrappers ont été générés par swig, mais le fichier d'interface est maintenant perdu.Définir un fichier d'interface swig pour la génération de wrapper à chaque type à partir d'un fichier d'en-tête

L'idée de base de la bibliothèque et les emballages pour elle est le suivant:

  • Il une seule fonction qui renvoie un pointeur vers un objet complexe. Et il y a des wrapper pour cette fonction.
  • L'objet complexe est une structure arborescente avec des dizaines de types de nœuds et de types (structures C) utilisés pour les représenter. Il y a des centaines d'emballages pour chaque domaine de chaque type et nous essayons de les utiliser tous.

La bibliothèque a été mise à jour il y a quelque temps et maintenant il y a quelques nouvelles données que nous ignorons encore, mais que nous aimerions utiliser. Ces données sont contenues dans certains objets indirectement contenus ou référencés à partir de l'objet créé par la fonction que nous appelons (De nouveaux champs et types ont été ajoutés).

Je sais que je ne devrais pas apporter de modifications aux enveloppes à la main et devrait plutôt modifier l'interface, mais comme je l'ai déjà écrit, il manque. Pour l'instant je veux seulement générer des wrappers quelques types qui sont ajoutés/changés et ceux-ci à nos anciens wrappers, mais plus tard je veux commencer la création du fichier d'interface qui définira "quoi et comment devrait être enveloppé". Toutes les définitions nécessaires pour nous sont définies dans un seul fichier d'en-tête. Est-il possible de dire à swig de générer des wrappers pour chaque type dans cet en-tête? Si oui, comment puis-je écrire un tel fichier d'interface?

Répondre

2

De l'swig tutorial:

Comme il se trouve, il est pas toujours nécessaire d'écrire une interface spéciale fichier . Si vous avez un fichier d'en-tête, vous pouvez souvent l'inclure directement dans l'interface SWIG. Par exemple:

%module example 
%{ 
/* Includes the header in the wrapper code */ 
#include "header.h" 
%} 

/* Parse the header file to generate wrappers */ 
%include "header.h" 
Questions connexes