1

私は過去にSWIGを使用してRuby-C++バインディングを正常に作成しました。ここで、C ++コードは、Rubyスクリプトが接続されたダイナミックライブラリとしてコンパイルされました。

ただし、逆にやりたいと思います。C ++を使用して実行可能ファイルを作成し、Rubyコードをロードして実行できるようにします。Rubyは、C ++側でも定義された関数を呼び出すことができるはずです(当然、そうでなければ、必要なのは「system()」呼び出しだけです)。

SWIGはこれを達成するための手段を提供しますか?

4

2 に答える 2

3

C++ に埋め込まれた Rubyに興味があるかもしれません

于 2009-10-16T13:21:49.293 に答える
2

SWIG はあなたの問題の一部を解決します: あなたが書いた C++ 関数への Ruby バインディングを作成することができます。Ruby コードを評価できる C++ プログラムを作成するという問題の残りの半分は、必要に応じて簡単にも複雑にもできます。

簡単な方法は、プログラムを 2 つの半分に分割することです。dll に存在する ruby​​ からアクセス可能な部分と、その dll にリンクして を介して Ruby を呼び出すアクセス不可能な部分ですsystem()

少し高いレベルでは、C++ から ruby​​ の C API を使用して Ruby コードを実行できます。これにより、Ruby コードの実行方法をより適切に制御できるようになり、Ruby 例外から C++ 例外を生成するブロックで実行されたすべての Ruby をラップするなどのことを行う機会が提供されます。ここでの欠点は、Ruby の C API を理解する必要があることです。これはひどいものではありませんが、Lua の API ほどフレンドリーではありません。

それ以上を望むなら、あなたは深海にいることになります。Ruby と C++ はどちらも複雑な言語であり、それらを相互運用させることは非常に困難です。Éric Malenfant のリンクが役に立つかもしれません。

于 2009-10-20T23:35:54.120 に答える