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

Project1

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

[已经解决] 如何让自己的引擎支持RGSS系统

[复制链接]

Lv2.观梦者

神隐的主犯

梦石
0
星屑
263
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

1
发表于 2010-10-20 14:47:29 | 显示全部楼层
本帖最后由 铃仙·优昙华院·因幡 于 2010-10-20 14:52 编辑
  1. HINSTANCE hInst;
  2. hInst = LoadLibrary("RGSS202E.dll");

  3. typedef int (_stdcall *fRGSSInitialize)(HINSTANCE);
  4. typedef int (_stdcall *fRGSSFinalize)(void);
  5. typedef int (_stdcall *fRGSSGameMain)(HWND, char*, char* /* ini */);
  6. typedef int (_stdcall *fRGSSEval)(char*);

  7. /* typedef int (_stdcall *fRGSSSetupRTP)(char*, int, int); */

  8. fRGSSInitialize RGSSInitialize = GetProcAddress(hInst,"RGSSInitialize");
  9. fRGSSFinalize RGSSFinalize = GetProcAddress(hInst,"RGSSFinalize");
  10. fRGSSGameMain RGSSGameMain = GetProcAddress(hInst,"RGSSGameMain");
  11. fRGSSEval RGSSEval = GetProcAddress(hInst,"RGSSEval");
  12. fRGSSSetupRTP RGSSSetupRTP = GetProcAddress(hInst,"RGSSSetupRTP");

  13. ---------------------------------------------------------------

  14. 调用顺序是:
  15. 1. RGSSSetupRTP 获得 RTP  // 不知道参数,所以,Orz
  16. 2. RGSSInitialize 初始化 RGSS 解析器. // RGSSInitialize(hInst)
  17. 3. RGSSGameMain 游戏主循环 // RGSSGameMain(窗口句柄, 脚本文件名, ini文件名) 好像是这样的

  18. N. RGSSEval 调用 // RGSSEval(脚本)

复制代码
目前的研究结果~~~ 不全~~, 不过大概是 Game.exe 里的调用顺序,细节没写出来~~~

点评

= =  发表于 2010-10-20 19:30
……囧,我找找某个神奇的东西  发表于 2010-10-20 19:23

评分

参与人数 2星屑 +700 收起 理由
六祈 + 400 辛苦了
fux2 + 300 认可答案~

查看全部评分


《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
263
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

2
发表于 2010-10-20 15:04:14 | 显示全部楼层
本帖最后由 铃仙·优昙华院·因幡 于 2010-10-20 15:05 编辑

回复 独孤残云 的帖子

仅仅是初学。 需要 Game.exe 的源码需要逆向。不过不知道 EB 同不同意就是了。

再说,咱也没那个能力~~~




然后是, 以上未测试。

其实可以去问问 RGE 里的大大们原理~~~
   
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
263
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

3
发表于 2010-10-20 15:24:03 | 显示全部楼层
回复 独孤残云 的帖子

C# 不会, C++ 的是这样的。

比如说有个 dll 名字是 add.dll , 导出了一个函数 int _add(int, int), 加载就是这样:

HINSTANCE hInst;  //句柄
hInst = LoadLibrary("add.dll"); // 动态加载 add.dll

typedef int (_stdcall *dll_add)(int, int);  // 声明一个函数指针,用来指向导出的函数

dll_add d_add = GetProcAddress(hInst,"_add"); // 获取导出函数的地址。

print("1 + 2 = %d \n", d_add(1, 2)); // 然后就可以正常使用了~~

   
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
263
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

4
发表于 2010-10-20 16:29:05 | 显示全部楼层
Lua 就是这样调用的。 不过感觉 Lua 比 RGSS 要好点。个人感觉~~~

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
263
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

5
发表于 2010-10-20 17:09:26 | 显示全部楼层
回复 独孤残云 的帖子

大人啥的不敢当的说。Lua 也只是初学,所以仅仅是感觉上~~~
   
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
263
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

6
发表于 2010-10-20 21:04:43 | 显示全部楼层
有所得必有所失么??

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-18 16:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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