代码之家  ›  专栏  ›  技术社区  ›  Robert Rouse

如何在当前RB文件中运行Ruby类的实例?(在C++中嵌入Ruby)

  •  1
  • Robert Rouse  · 技术社区  · 17 年前

    基本上,我运行ruby文件,然后ruby接管并调用我的C++类。

    我按如下方式执行ruby文件:

    rb_eval_string_protect(<ruby script string>, &status );
    
    rb_funcall(Qnil, rb_intern("main"), 0);
    

    如果必须的话,我会添加一个参数或另一个函数来传递实例,但是,我不确定如何在C++中定义它,以便在SWIG生成绑定时一切正常。

    Calling Ruby class methods from C++

    1 回复  |  直到 9 年前
        1
  •  1
  •   rampion    17 年前

    rb_eval_string_protect() 返回给定脚本最后一行的值,以及 rb_funcall()

    # I'm a ruby script!
    main_retval = main()
    

    然后在C中捕获返回值是类似的:

    // I'm some C (or C++) code
    VALUE main_retval;
    // ...
    rb_eval_string_protect("...", &status);
    main_retval = rb_funcall(Qnil, rb_intern("main"), 0);
    

    并将为您提供对以下对象返回的ruby对象的引用 main .

    您可以正常使用此对象,调用方法等

    VALUE main_retval_as_string = rb_funcall(main_retval, rb_intern("to_s"), 0);
    
    推荐文章