J'ai la fonction C suivante. Comment dois-je l'emballer pour qu'il puisse être appelé à partir d'un script Lua?Comment faire pour enchaîner une fonction C dont les paramètres sont pointeur vers des structures, afin qu'elle puisse être appelée depuis Lua?
typedef struct tagT{
int a ;
int b ;
} type_t;
int lib_a_f_4(type_t *t)
{
return t->a * t->b ;
}
Je sais comment wrapr si le type de paramètre de fonction étaient int
ou char *
. Devrais-je utiliser le type table
pour une structure en C?
EDIT: J'utilise SWIG pour le wrapping, selon ce doc, il semble que je devrais avoir automatiquement cette fonction new_type_t(2,3)
, mais ce n'est pas le cas.
Si vous enroulez une structure C, il est également mappé à une Lua userdata. En ajoutant un metatable aux données d'utilisateur, ce fournit une interface très naturelle. Pour exemple,
struct Point{ int x,y; };
est utilisé comme suit:
p=example.new_Point()
p.x=3
p.y=5
print(p.x,p.y) 3 5
accès similaire est prévu pour les syndicats et les membres de données des classes C++. Les structures C sont créées à l'aide d'une fonction new_Point(), mais pour C++ , les classes sont créées en utilisant uniquement le point Point().
Évitez SWIG. Il crée au moins autant de problèmes que cela provoque, et il est assez facile de créer les appels d'API à la main. –
@Norman: J'ai besoin d'emballer beaucoup d'API existantes pour que je puisse l'appeler à partir de lua, donc une manière automaic est un MUST. Avez-vous d'autres recommandations? – pierrotlefou
Combien coûte "lots"? Si c'est moins de 100 fonctions, vous feriez mieux de le faire à la main. Mais si vous voulez essayer une méthode automatisée, 'tolua' est légèrement moins fou que SWIG. Seulement un peu. Même «tolua» ajoute beaucoup de poids inutile. http://www.tecgraf.puc-rio.br/~celes/tolua/ –