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
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.
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.
- 1. Lier des liaisons avec des structures
- 2. Bibliothèques de wrappers autour des API J2ME
- 3. Comment ajouter des liaisons à une nouvelle langue?
- 4. wrappers de requête et de réponse WSGI
- 5. Installation de libxml2 et des liaisons python associées - Windows
- 6. Y at-il des liaisons entre .NET et TK
- 7. Comment créer des wrappers pour les attributs de propriété?
- 8. Comment écrire des liaisons Python pour les applications de ligne de commande
- 9. Liaisons ET cible/action?
- 10. Liaisons Gtk + et OpenGL
- 11. Récupération des liaisons de configuration WCF
- 12. Suppression des liaisons de données ajoutées manuellement
- 13. Lecture des liaisons d'hôte du site IIS7
- 14. Javascript wrappers pour Twitter
- 15. javascript templating avec des liaisons de données
- 16. Vous cherchez un tableau des liaisons Wpf
- 17. PHP interface Perl interface ou des liaisons
- 18. NSOutlineView avec des liaisons pilotées par des données de base
- 19. Appeler et écrire des fonctions jquery/javascript
- 20. Lire et écrire simultanément des fichiers?
- 21. Comment écrire des événements et des eventhandlers en C#?
- 22. authorize.net C# wrappers/library
- 23. NSTableView, plusieurs cellules et liaisons
- 24. Liaisons logiques et chemins Unix
- 25. Existe-t-il un outil pour générer automatiquement des wrappers autour des classes?
- 26. Où écrire des exceptions
- 27. Écrire des contrôles personnalisés
- 28. Est-il possible de consolider des liaisons de données et/ou des déclencheurs similaires dans XAML?
- 29. Écrire des applications Blackberry
- 30. Écrire des images?
Donc, faire des choses Pythonic signifierait écrire toute la bibliothèque comme un module à partir de zéro? – tsudot
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. –