interface swig

interface swig - Python - Programmation

Marsh Posté le 08-11-2008 à 17:36:24    

Salutation,
 
Je travaille en ce moment à la réalisation d'une suite avionique pour mon simulateur de vol. Ayant travaillé en Python et ayant apprécié ce langage, je me suis décidé à réutiliser celui-ci. (j'avoue que la perspective de réutiliser certains passage de mon code n'y sont pas non plus pour rien).
 
Or, pour interfacer Flight Sim avec mon code, il faut passer par un module. Les SDK de ce module n'incluent pas de Python comme sources, mais incluent du C.
 
SWIG permet d'interface du C avec du Python, mais voilà un long moment (environ 3 mois que j'essaie de trouver) que je cherche à le faire marcher. Je dois avouer en être bien incapable.
 
J'ai regardé le tutoriel sur le site de SWIG, et la documentation, mais ça ne m'aide pas, sans doute parce que je ne comprends pas tout ce qu'il s'y raconte.
 
Ma question est: y aurait-il quelqu'un qui serait prêt à m'aider, c'est à dire à me fabriquer cette interface, sachant que j'ai déjà le .i, un .c et un .h et que ce que je n'arrive pas à faire, c'est mixer le tout pour avoir un module python à inclure dans mon projet. Ou au moins, m'expliquer clairement comment faire..  :??:  
 
 
Merci pour vos réponses

Reply

Marsh Posté le 08-11-2008 à 17:36:24   

Reply

Marsh Posté le 17-11-2008 à 18:28:40    

Voici un bon tutoriel pour commencer avec swig:
http://www.geocities.com/foetsch/p [...] python.htm
http://www.geocities.com/foetsch/python/swig_linux.htm
 
Tu arrives à faire un module simple ?

Reply

Marsh Posté le 17-11-2008 à 18:42:53    

Merci, je vais tester ça, je te dirais après :)

Reply

Marsh Posté le 12-12-2008 à 16:45:15    

hello
 
me revoilà.
 
alors, j'ai testé le tutoriel du premier lien. Ca tombait vachement bien parce que j'ai VC++ 6.0 aussi donc j'étais pas (trop) perdu.
 
j'ai réussi une première fois à faire tourner la compilation, il m'a sorti un fichier .pyd comme il faut.
 
sauf qu'il n'a pas créé de fichier *_warp.cpp comme il aurait du. (ni de fichier *.py)
 
 
 
j'avais donc laissé un peu ça de côté, ayant d'autres choses à faire aussi, et je viens de me repencher sur le problème.
 
Maintenant, il ne compile plus et me dit:
 

Citation :

Performing Custom Build Step on .\fs.i
.\fs.i(14): Error: Syntax error in input(1).
Error executing c:\windows\system32\cmd.exe.
 
_fsinterface.pyd - 1 error(s), 0 warning(s)


 
 
 
La ligne 14 en question correspond à la ligne 3 dans l'extrait suivant:

Code :
  1. %module fsinterface
  2. {%


(ce qu'il y a avant n'est que du commentaire)
 
 
une idée de ce qui pourrait se passer?
 
 
peut-être que je ne fais pas le fichier *.i correctement.. Voici son code, à tout hasard:
 

Code :
  1. %module fsinterface
  2. {%
  3. //includes
  4. #include <windows.h>
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <FSUIPC/FSUIPC_User.h>
  9. /********************GET***********************/
  10. double GetDouble(int);
  11. Sint32 GetSint32(int);
  12. Sint16 GetSint16(int);
  13. Sint8 GetSint8(int);
  14. Uint32 GetUint32(int);
  15. Uint16 GetUint16(int);
  16. Uint8 GetUint8(int);
  17. char GetChar(int);
  18. /*string256 GetString256(int);
  19. string64 GetString64(int);
  20. string8 GetString8(int);
  21. string6 GetString6(int);
  22. string25 GetString25(int);
  23. */
  24. /********************SET***********************/
  25. int SetDouble(int , double)
  26. int SetSint32(int, Sint32)
  27. int SetSint16(int, Sint16)
  28. int SetSint8(int, Sint8)
  29. int SetUint32(int, Uint32)
  30. int SetUint16(int, Uint16)
  31. int SetUint8(int, Uint8)
  32. %}
  33. #include <windows.h>
  34. #include <stdlib.h>
  35. #include <stdio.h>
  36. #include <string.h>
  37. #include <FSUIPC/FSUIPC_User.h>
  38. /********************GET***********************/
  39. double GetDouble(int);
  40. Sint32 GetSint32(int);
  41. Sint16 GetSint16(int);
  42. Sint8 GetSint8(int);
  43. Uint32 GetUint32(int);
  44. Uint16 GetUint16(int);
  45. Uint8 GetUint8(int);
  46. char GetChar(int);
  47. /*string256 GetString256(int);
  48. string64 GetString64(int);
  49. string8 GetString8(int);
  50. string6 GetString6(int);
  51. string25 GetString25(int);
  52. */
  53. /********************SET***********************/
  54. int SetDouble(int , double)
  55. int SetSint32(int, Sint32)
  56. int SetSint16(int, Sint16)
  57. int SetSint8(int, Sint8)
  58. int SetUint32(int, Uint32)
  59. int SetUint16(int, Uint16)
  60. int SetUint8(int, Uint8)

Reply

Marsh Posté le 12-12-2008 à 19:55:48    

masterdPm a écrit :

hello
 
j'ai réussi une première fois à faire tourner la compilation, il m'a sorti un fichier .pyd comme il faut.
 
sauf qu'il n'a pas créé de fichier *_warp.cpp comme il aurait du. (ni de fichier *.py)


 
Le _warp.cpp, c'est à toi de le créer, via la commande  

Citation :

swig -c++ -python -o your_extension_wrap.cpp your_extension.i


 
Concernant l'autre problème, je ne vois pas, mais essaie peut être de faire un truc tout simple (un peu comme le tutoriel) pour faire marcher le truc. Puis tu t'attaques à ton vrai problème.
 
++

Reply

Marsh Posté le 12-12-2008 à 19:57:45    

J'avais lu trop vite. La syntaxe du .i est

Code :
  1. %{
  2.     #include "some_class.h"
  3.     %}


 
et non pas

Code :
  1. {%
  2. ...
  3. %}

Reply

Marsh Posté le 12-12-2008 à 23:46:30    

ah ouais! J'avais pas vu tiens...
 
et il manquait aussi pas mal de ";"... ça m'apprendra à refaire du C sans faire gaffe (après 3 mois de python, c'est dur de penser à ces points-virgules)
 
Je retente et je te dis :)
 
Merci pour ton aide en tous cas

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed