设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1730|回复: 9
打印 上一主题 下一主题

[有事请教] 请教C/C++与Ruby交互内部类为空该怎么解决呢?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2749
在线时间
2630 小时
注册时间
2013-1-16
帖子
5657

贵宾

跳转到指定楼层
1
发表于 2022-11-25 16:15:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 myownroc 于 2022-11-25 16:49 编辑

工作摸鱼想弄个类似RPG Maker的Ruby引擎。

各种交互都挺好的,结果发现在调用诸如Time.now这样的Ruby内建类的函数时发现程序会崩溃。

跟进去一看应该是找不到Time这样的内建类,导致操作空指针使程序崩溃,而内建的模块比如Math就不存在这种问题。于是我现在就很迷惑RPG Maker中是怎么能够调用Ruby内建类的……

找了一下ruby.h貌似并没有相关的接口提供,文档更是少之又少(版本还很旧),于是上论坛上请教大伙看看有没有人知道的~

坏了,好像Windows下编译的Ruby才会有这种情况。

顺便附一份代码
C 代码复制
  1. /*
  2. 环境:Win10
  3. 编译器:VS2019
  4. */
  5.  
  6. #include <ruby/ruby.h>
  7.  
  8. int main(int argc, char* argv[])
  9. {
  10.     ruby_sysinit(&argc, &argv);
  11.     RUBY_INIT_STACK;
  12.     ruby_init();
  13.     ruby_script("ruby-interact");
  14.     ruby_init_loadpath();
  15.  
  16.     rb_eval_string("p Math.sqrt(10.0)");
  17.     rb_eval_string("p Marshal.dump([0, 1, 2, 3, 4])");
  18.     rb_eval_string("p Time.now()"); // Program crashes here.
  19.  
  20.     ruby_finalize();
  21.     return 0;
  22. }
(Created by @喵kano)


施工现场:hotege.github.io

Lv4.逐梦者

梦石
0
星屑
12336
在线时间
993 小时
注册时间
2019-11-5
帖子
2431

极短25参与极短24参与

2
发表于 2022-11-27 11:00:05 | 只看该作者

  这种问题已经可以发在csdn和github上问了吧!?




风继续吹,不忍远离。年少轻狂,眼神明亮,最好的年纪,最好的时光。希望岁月是一场春梦
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23999
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

3
发表于 2022-11-27 23:00:59 | 只看该作者
本帖最后由 guoxiaomi 于 2022-11-28 00:45 编辑

看了一下我写的代码,还有一个rb_call_builtin_inits没调用:
  1. /** @brief 初始化 ruby 运行环境 */
  2.     explicit ruby_library() : ruby_state(0)
  3.     {
  4.         int argc = 0;
  5.         char* argv = nullptr;
  6.         char** pArgv = &argv;

  7.         ruby_sysinit(&argc, &pArgv);
  8.         RUBY_INIT_STACK;
  9.         ruby_init();
  10.         ruby_init_loadpath();
  11.         rb_call_builtin_inits();
  12.     }
复制代码


可以参照一下我这个帖子的18楼的源码:https://rpg.blue/thread-488007-1-1.html

点评

有可能,RGU的ruby是VS编译的,据说需要一些魔改,你可以问问他  发表于 2022-11-30 01:49
是的,不过我的Ruby是Visual Studio编译的,不知道是不是因为这个导致的错误~  发表于 2022-11-29 20:25
是链接到Ruby的动态库吗,可以参照一下https://gitee.com/rmxp/sdlrgss里的makefile?不行就换lua呗……  发表于 2022-11-29 14:27
3.1.3和3.1.2都有,我现在想放弃直接用Lua了  发表于 2022-11-28 19:46
你ruby什么版本?我这边是3.1.2  发表于 2022-11-28 13:57
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-27 13:04

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表