mrubyで書いたコードをC言語内で読み出す方法です。
今回はまんま参考もと様と同じ内容ですが……
mrubyコードをC言語に埋め込む
今回導入するコードは以下の通り
C言語のコード
ソース1。mrb_funcallで実行開始です。
3番目が呼び出す関数名、4番目が引数の数です。
/* sample.c */ #include "mruby.h" #include "mruby/proc.h" #include "mruby/compile.h" #include "stdio.h" int main () { mrb_state* mrb; int n; FILE* f; mrb_value ret; mrb = mrb_open(); f = fopen("test.rb", "r"); mrb_load_file(mrb, f); fclose(f); ret = mrb_funcall(mrb, mrb_top_self(mrb), "test", 1, mrb_fixnum_value(20) ); printf("ret=%d\n", mrb_fixnum(ret)); return 0; }
mrubyスクリプト
ソース2。引数を二倍して返すのみ。
##test.rb def test a return a * 2 end
試す
mrubyへのリンクを貼る
$ ln -s ~/path/to/mruby/ mruby
ソースコードの用意
$ cat > sample.c <<EOS #{例の如くソース1を入力} > EOS $ cat > test.rb <<EOS #{例の如くソース2を入力} > EOS $ ls -FG test.rb mruby@ sample.c
コンパイル&実行
$ gcc -I mruby/include/ -I mruby/src/ sample.c mruby/build/host/lib/libmruby.a -lm $ ./a.out ret=40
まとめ
最も基本的な例について扱いました。
mruby内部ではClassやHashも使えるので、もっと複雑なロジックを書く事が出来ます。