[英]calling mruby VM in C++
我試圖將一些在C中調用的ruby解釋器代碼轉換為mruby格式。 我被困住了,不勝感激。
我的testruby.rb文件內容:
#require 'MyMod'
def helloworld(var1)
puts "You said #{var1}"
return MyMod.Issue1(var1).to_s
end
以下是我的C ++文件的代碼段:
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?
}
上面的方法,我作為模塊發送到mruby解釋器,以便.rb文件可以調用此方法。
請讓我知道以下格式是否正確:
struct RClass *mod = mrb_define_module(mrb, "MyMod");
mrb_define_module_function(mrb, mod, "SumI", Issue1, MRB_ARGS_REQ(1));
如何將下面的ruby解釋器代碼轉換為mruby?
rb_require( “./ testruby”); //其中testruby是我的testruby.rb文件
現在,我想從testruby.rb文件中調用helloworld方法。 如何為mruby調用等效方法(對於rb_funcall)?
如何在我的C ++代碼中從helloworld方法讀取返回值?
問候,
關於val1
: mrb_value
是可以容納任何mruby對象的類型。可以使用mrb_funcall
來操作val1
。 該函數返回一個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:mruby中沒有require
: mrbgems
被編譯並與目標二進制文件靜態鏈接(它們在頂層build_config.rb
文件中列出)。 (存在一個名為mruby-require
寶石來模仿CRuby的require
,但我從未使用過它)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.