簡體   English   中英

在C ++中調用mruby VM

[英]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 ++文件的代碼段:

問題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?
} 

上面的方法,我作為模塊發送到mruby解釋器,以便.rb文件可以調用此方法。

請讓我知道以下格式是否正確:

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

Issue2:

如何將下面的ruby解釋器代碼轉換為mruby?

rb_require( “./ testruby”); //其中testruby是我的testruby.rb文件

現在,我想從testruby.rb文件中調用helloworld方法。 如何為mruby調用等效方法(對於rb_funcall)?

如何在我的C ++代碼中從helloworld方法讀取返回值?

問候,

關於val1mrb_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中沒有requiremrbgems被編譯並與目標二進制文件靜態鏈接(它們在頂層build_config.rb文件中列出)。 (存在一個名為mruby-require寶石來模仿CRuby的require ,但我從未使用過它)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM