实际上在RGSS自带的那个帮助文档里,有很多的Ruby的内容是没有提到的,比如里面就没有提到怎么样使用API(DLL),这样的话很多的功能就浪费了。 美兽制作的很多东西都是使用到API的,但是没有相关说明的话是没有那么容易理解的。 所以,诞生了这个教程,详细告诉RMER如何利用DLL来增强RM,完成RM无法单独完成的任务!
教程第一弹:Win32API类的介绍
Win32API是Ruby中一个为调用Win32 API而准备的类。
其包含以下方法:
#大小写是不用我提示的,必须要注意哦 Win32API.new(dllname, proc, import, export) #功能:加载名为dllname的DLL,生成DLL导出API函数中proc的对象,在import中指定proc的参数类型列表,在export中指定proc返回值的类型。这里的DLL可以存在于系统的System32(WinXP)目录下,也可以是游戏根目录。proc就是选择DLL导出函数中的一个。关于参数的类型使用下列字符串或数组来指定类型。
"p" 指针 "n","l" long "i" int "v" void 若import为nil,则看成是没有参数。若export为nil,则看做是没有返回值(void)。
#这里就是说首字母不分大小写 Win32API#call([args ...]) Win32API#Call([args ...]) #功能:调用“声明过”的API函数。参数和返回值与new过程中申明的一一对应。若是传递了指针,应该预先开辟出保存空间(否则内存混乱……)。
例如调用一个返回字符串的函数时应该这样:
obj = Win32API.new 'dllname.dll', 'foo', 'p', 'v' arg = "\0" * 256 obj.call(arg)
传递指针数组时,应该这样处理。
obj = Win32API.new 'dllname.dll', 'foo', 'p', 'v' args = ["\0" * 256, "\0" * 256, "\0" * 256,] obj.call(args.pack("p3"))
总而言之就这些了,因为不是专业搞这个的,描述的不好不准确的地方还请大家指教,尤其是美兽啦。 下一期:Win32API调用示例——固定游戏窗口于顶层
|