Project1
标题:
请教C/C++与Ruby交互内部类为空该怎么解决呢?
[打印本页]
作者:
myownroc
时间:
2022-11-25 16:15
标题:
请教C/C++与Ruby交互内部类为空该怎么解决呢?
本帖最后由 myownroc 于 2022-11-25 16:49 编辑
工作摸鱼想弄个类似RPG Maker的Ruby引擎。
各种交互都挺好的,结果发现在调用诸如Time.now这样的Ruby内建类的函数时发现程序会崩溃。
跟进去一看应该是找不到Time这样的内建类,导致操作空指针使程序崩溃,而内建的模块比如Math就不存在这种问题。于是我现在就很迷惑RPG Maker中是怎么能够调用Ruby内建类的……
找了一下ruby.h貌似并没有相关的接口提供,文档更是少之又少(版本还很旧),于是上论坛上请教大伙看看有没有人知道的~
坏了,好像Windows下编译的Ruby才会有这种情况。
顺便附一份代码
[pre lang="C"]
/*
环境:Win10
编译器:VS2019
*/
#include <ruby/ruby.h>
int main(int argc, char* argv[])
{
ruby_sysinit(&argc, &argv);
RUBY_INIT_STACK;
ruby_init();
ruby_script("ruby-interact");
ruby_init_loadpath();
rb_eval_string("p Math.sqrt(10.0)");
rb_eval_string("p Marshal.dump([0, 1, 2, 3, 4])");
rb_eval_string("p Time.now()"); // Program crashes here.
ruby_finalize();
return 0;
}
[/pre]
作者:
哇哇哇啊叭叭
时间:
2022-11-27 11:00
这种问题已经可以发在csdn和github上问了吧!?
作者:
guoxiaomi
时间:
2022-11-27 23:00
本帖最后由 guoxiaomi 于 2022-11-28 00:45 编辑
看了一下我写的代码,还有一个rb_call_builtin_inits没调用:
/** @brief 初始化 ruby 运行环境 */
explicit ruby_library() : ruby_state(0)
{
int argc = 0;
char* argv = nullptr;
char** pArgv = &argv;
ruby_sysinit(&argc, &pArgv);
RUBY_INIT_STACK;
ruby_init();
ruby_init_loadpath();
rb_call_builtin_inits();
}
复制代码
可以参照一下我这个帖子的18楼的源码:
https://rpg.blue/thread-488007-1-1.html
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X5.0