赞 | 1 |
VIP | 1647 |
好人卡 | 10 |
积分 | 1 |
经验 | 363065 |
最后登录 | 2016-8-26 |
在线时间 | 1707 小时 |
Lv1.梦旅人 炎发灼眼的讨伐者
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 1707 小时
- 注册时间
- 2007-8-4
- 帖子
- 904
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 灼眼的夏娜 于 2009-7-17 11:57 编辑
针对RGSS102J.dll的补丁程序~
by 灼眼的夏娜
说明:
主要实现功能,提供RGSS中的so扩展支持,考虑扩充部分内部类?
熟悉ruby的人都知道ruby里有一种c语言的扩展库,但测试在RM中却无法使用require失败~
究其原因有以下几点:1、RGSS中对require方法进行了某些特殊处理;2、RGSS中对于C扩展运行所需要的条件不具备?- - ruby的C扩展在windows下就是以dll形式提供的,然后扩展dll链接到ruby解释器的lib文件,然后ruby解释器require的时候Load dll并调用扩展dll中的一个 void Init_XXXX()方法进行初始化扩展类。
因此我们只要是我们编写的扩展dll链接到ruby解释器上应该就行了~
RMruby的解释器封装在RGSS102Jdll里~
因此我们只需要导出RGSS102J里供扩展dll所需要的函数并提供lib文件即可~
所以我们反汇编得到需要的函数地址~
然后这里怎么导出呢?有两种办法:一是直接修改RGSS102J.dll的导出表,而是新建一个dll直接jmp到对应的地址。 该补丁采用的后一种方法,因为该补丁顺便可以直接提供一些RGSS内部类的扩展。
至此 使RM支持扩展dll的条件全部具备,剩下的就是体力活了><(OTL ruby解释器的函数好多- -望天)
目前仅提供1.01版本测试 :函数部分导出
待补完必要的以后发布源码工程~
v1.01-OLE初步测试版
源码&测试工程地址~
http://rgss102jpatch.googlecode.com/svn/trunk/
^ ^ |
|