1

C で呼び出された ruby​​ インタープリター コードの一部を mruby 形式に変換しようとしています。私は立ち往生しており、ここで助けていただければ幸いです。

私のtestruby.rbファイルの内容:

#require 'MyMod'

def helloworld(var1)
    puts "You said #{var1}"
    return MyMod.Issue1(var1).to_s
end

以下は、私の C++ ファイルのスニペットです。

問題 1:

static mrb_value Issue1(mrb_state *mrb, mrb_value mrb_self)
{
    mrb_??? val1; // What should be the type for string and where to find all the types?
    mrb_get_args(mrb, "s", ?);
// How to manipulate val1? Say I want to concatenate few more data.
    return mrb_????(val1); // How do I return this value?
} 

上記の方法で、.rbファイルがこれを呼び出せるようにモジュールとしてmrubyインタープリターに送っています。

以下の形式が正しいかどうか教えてください。

struct RClass *mod = mrb_define_module(mrb, "MyMod");
mrb_define_module_function(mrb, mod, "SumI", Issue1, MRB_ARGS_REQ(1));

問題 2:

以下の ruby​​ インタープリター コードを mruby に変換するにはどうすればよいですか?

rb_require("./testruby"); // testruby は私の testruby.rb ファイルです

次に、testruby.rb ファイルから helloworld メソッドを呼び出します。mruby の (rb_funcall の) 同等のメソッドを呼び出すにはどうすればよいですか?

C++ コードで helloworld メソッドからの戻り値を読み取るにはどうすればよいですか?

よろしく、

4

1 に答える 1

2

Re val1:mrb_valueは任意の mruby オブジェクトを保持できる型であり、val1を使用して操作できますmrb_funcall。その関数は次を返しますmrb_value

mrb_value my_str = mrb_funcall(mrb_context, your_object, "your_method", 0);
printf("my_str = %s\n", RSTRING_PTR(my_str));

再発行 2: requiremruby にmrbgemsはありません: コンパイルされ、ターゲット バイナリと静的にリンクされます (最上位build_config.rbファイルにリストされます)。( mruby-requireCRuby の を模倣する という gem が存在しますrequireが、私は使用したことがありません)

于 2015-08-08T18:29:44.630 に答える