extensions ou elipses [RESOLU] - [C++][ruby] - C++ - Programmation
Marsh Posté le 28-07-2002 à 18:45:54
j'ajoute juste le prototype de rb_define_method, ca peut toujours servir :
Code :
|
Marsh Posté le 28-07-2002 à 18:50:36
Donc il faut que t'écrives:
Code :
|
Marsh Posté le 28-07-2002 à 18:53:44
Le probleme, c'est que dans ce test je me sers pas des parametres donc ca me gène pas. Mais si je veux les recupérer je suis obligé de me taper tout le traitement avec les va_list & cie ?
Question annexe : comment ca se fait que ca marche en C ?
Edit:
Apres test, le ... permet de compiler sans probleme, mais du coup la bibliothèque est inutilisable :
irb(main):001:0> require 'simple'
LoadError: (null) - ./simpe.so
Marsh Posté le 28-07-2002 à 23:17:01
Je me reponds :
Pour le LoadError dans ruby, c'est parce que le symbole attribué a la fonction ne colle pas avec ce qu'il aurait été en C, donc l'interpréteur ne peut pas l'appeler. Il faut préciser extern "C".
Pour le probleme des ellipses, un bon gros cast des familles fait l'affaire.
Voila ce que ca donne au final
Code :
|
Marsh Posté le 28-07-2002 à 18:26:31
Bon, le contexte : j'essaye de faire une extension pour ruby, mais au lieu de la faire en C je dois la faire en C++.
Le fichier ressemble a ca :
Ca me sert juste a tester. En fait je défini une classe Simple avec la méthode run qui renvoie vrai.
Si je mets ce code dans un fichier avec un extension .c et que l'extension se compile avec gcc, ca passe sans probleme.
Par contre, si je le mets dans un .cc ou equivalent et que je le compile avec g++ j'ai une sale erreur :
simpe.cc: In function `void Init_simple()':
simpe.cc:11: ANSI C++ prohibits conversion from `(long unsigned int)' to `(...)'
En fait, la fonction rb_define_method prends comme 3eme parametre
un pointeur de fonction, dont le prototype doit utiliser une ellipse (c'est comme ca que je comprends le ... dans l'erreur).
La question, c'est comment faire en sorte que ce code soit accepté par un compilateur C++, quelle est l'erreur en fait.
Edit: formattage
Message édité par lorill le 28-07-2002 à 23:17:54