2010-07-15 4 views
7

Je continue de voir des gens écrire des enveloppes pour, disons un module écrit en langage X pour l'utiliser en langage Y. Je voulais connaître les bases de l'écriture de ces wrappers. D'où part-on? Ma question ici est plus spécifique pour libgnokii, comment puis-je commencer à écrire des liaisons python pour cela.Écrire des liaisons et des wrappers

Répondre

7

Vous pouvez commencer par lire ceci: extending python with c or c++ Et puis, quand vous décidez que c'est trop de tracas, vous pouvez consulter swig ou éventuellement Boost.Python. ctypes peut également être utile.

J'ai fait un wrapping manuel des classes C++ et j'ai utilisé swig. Swig était beaucoup plus facile à utiliser, mais à la fin, je voulais faire des choses qui n'étaient pas faciles à faire (ou j'étais juste trop paresseux pour comprendre comment). J'ai donc fini par faire un emballage manuel. C'est un peu de travail mais si vous connaissez un peu de C, c'est très faisable.

2

Vous pouvez commencer par regarder here pour plus d'informations sur l'extension de Python avec C. Vous voudrez probablement réfléchir à la façon de traduire l'API de libgnokii en quelque chose de Pythonic pendant que vous y êtes. Si vous ne voulez pas faire beaucoup de travail, vous pouvez simplement écrire un wrapper qui convertit tous les appels API gnokii en fonctions Python.

+0

Donc, faire des choses Pythonic signifierait écrire toute la bibliothèque comme un module à partir de zéro? – tsudot

+2

Non, pas nécessairement. Un exemple de ce que j'ai fait: j'avais une classe C++ dont j'avais besoin pour créer un objet avant de pouvoir utiliser une fonction (dans ce cas, la fonction aurait dû être statique). Au lieu de faire suivre les mêmes étapes à l'utilisateur du module python, j'ai simplement intégré un objet de cette classe dans mon extension python et j'ai exposé la fonction en tant que fonction dans un module python, en masquant le fait qu'il appartenait à une classe Pas vraiment nécessaire. Donc, un peu de rangement des interfaces un peu. –

Questions connexes