赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 2 |
经验 | 0 |
最后登录 | 2017-2-1 |
在线时间 | 16 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 1788
- 在线时间
- 16 小时
- 注册时间
- 2014-12-7
- 帖子
- 4
|
本帖最后由 长虹剑 于 2015-8-20 15:17 编辑
不好意思发错地方了,既然发了,就留下来吧
用纯ruby实现Game.exe 目前写到这里了,目前还没有写窗口的生成,打算就是完全调用Winapi实现。 还有本来想基于rgss3写的,可是不知道rgss3.dll有什么,怎么用。比如它就没有RGSSInitialize,直接用RGSSEval还报错。- # -*- coding:utf-8 -*-
- require 'Win32API'
- require 'pathname'
- require 'iniparse' #读取ini文件
- require 'cstruct/win32struct'
- MAX_PATH=100
- Gameini="Game.ini"
- #----------
- #FindWindow=Win32API.new("user32", "FindWindow", ['P','P'], 'L')
- LoadLibraryA=Win32API.new("kernel32", "LoadLibraryA", ['P'], 'L')
- GetProcAddress=Win32API.new("kernel32", "GetProcAddress", ['L','P'], 'L')
- #-------
- szAppPath=Pathname.new(File.dirname(__FILE__)).realpath
- #puts Dir.getwd 获得当前的执行目录 ***
- Dir.chdir(szAppPath) #改变当前目录
- hd_gameini=IniParse.parse( File.read "#{Gameini}" )
- szLibrary=hd_gameini["Game"]["Library"]
- szTitle=hd_gameini["Game"]["Title"]
- szScripts=hd_gameini["Game"]["Scripts"]
- #通过核心库加载程序
- hRgssCore = LoadLibraryA.Call(szLibrary);
- pRGSSEval=Win32API.new(szLibrary, "RGSSEval", ['P'], 'I') # 这种方式只是使用,根本没加入内存
- #pRGSSEval=GetProcAddress.Call(hRgssCore,"RGSSEval") #之后就不会用了
- pRGSSSetupRTP=Win32API.new(szLibrary, "RGSSSetupRTP", ['P','P','I'], 'B')
- pRGSSInitialize=Win32API.new(szLibrary, "RGSSInitialize", 'L', 'L')
- pRGSSGameMain=Win32API.new(szLibrary, "RGSSGameMain", ['L','P','P'], 'V')
- #puts Win32API::COLOR_WINDOWFRAME
- pRGSSInitialize.Call(hRgssCore)
- pRGSSEval.Call(" s=Sprite.new "); #不报错
- pRGSSEval.Call(" p 12*7+2 "); #正常显示了
- #还差窗口显示
- #puts pRGSSEval
- #pRGSSEval.Call("$DEBUG = true");
- #exit
- #hInstance=FindWindow.Call("ConsoleWindowClass",nil)
复制代码 |
|