基本上,我运行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++
rb_eval_string_protect() 返回给定脚本最后一行的值,以及 rb_funcall()
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 .
main
您可以正常使用此对象,调用方法等
VALUE main_retval_as_string = rb_funcall(main_retval, rb_intern("to_s"), 0);