2009-10-16 7 views
1

J'ai créé avec succès des liaisons Ruby-C++ dans le passé en utilisant SWIG où le code C++ était compilé en tant que bibliothèque dynamique avec le script Ruby qui s'y connectait.Intégration de Ruby dans une application C++ en utilisant SWIG?

Cependant, je voudrais le faire dans l'autre sens. Créez un exécutable en utilisant C++ et activez-le pour charger et exécuter du code Ruby. Ruby devrait aussi pouvoir appeler des fonctions définies du côté C++ (naturellement, tout ce dont j'aurais besoin est l'appel 'system()'.)

Est-ce que SWIG fournit les moyens pour y parvenir?

Répondre

2

SWIG permet de résoudre une partie de votre problème: il vous permet de créer des liaisons Ruby à C++ fonctions que vous avez écrit. L'autre moitié de votre problème, faire un programme C++ qui peut évaluer le code Ruby, peut être aussi facile ou compliqué que vous le souhaitez.

La manière la plus simple est de diviser votre programme en deux moitiés: une partie accessible à Ruby qui se trouve dans une DLL, et une partie inaccessible qui lie avec cette DLL et invoque Ruby via system().

À un niveau légèrement supérieur, vous pouvez utiliser l'API C de ruby ​​à partir de C++ pour exécuter du code Ruby. Cela vous donne un meilleur contrôle sur la façon dont le code Ruby est exécuté, et vous offre la possibilité de faire des choses comme emballer tout Ruby exécuté dans des blocs qui génèrent des exceptions C++ à partir des exceptions Ruby. L'inconvénient ici est que vous aurez besoin de comprendre l'API C de Ruby, ce qui n'est pas terrible mais certainement pas aussi amical que, disons, celui de Lua.

Si vous voulez plus que cela, vous êtes dans les eaux profondes. Ruby et C++ sont des langages compliqués, et leur interopérabilité est un véritable défi. Le lien d'Éric Malenfant peut vous être utile.

Questions connexes