本帖最后由 铃仙·优昙华院·因幡 于 2013-8-1 16:02 编辑
咱只能说用 Win32API 这个 Ruby 类来调用.
引用一下:
Win32API.new(dllname, proc, import, export) 加载名为dllname的DLL,生成API函数proc的对象。在import中指定proc的参数类型列表,在export中指定proc返回值的类型。 使用下列字符串或数组来指定类型。 "p" 指针 "n", "l" long "i" int "v" void 若import为nil,则看成是没有参数。若export为nil,则看做是没有返回值(void)。
Win32API.new(dllname, proc, import, export)
加载名为dllname的DLL,生成API函数proc的对象。在import中指定proc的参数类型列表,在export中指定proc返回值的类型。
使用下列字符串或数组来指定类型。
"p" 指针
"n", "l" long
"i" int
"v" void
若import为nil,则看成是没有参数。若export为nil,则看做是没有返回值(void)。
Win32API.new 可以成是 C++ 里动态调用所要做的第一步, 也就是
HINSTANCE hdll = ::LoadLibrary(dllname); typedef [export] (*DllFunc)([import]); DllFunc _DllFunc = (DllFunc)::GetProcAddress(hdll, proc);
HINSTANCE hdll = ::LoadLibrary(dllname);
typedef [export] (*DllFunc)([import]);
DllFunc _DllFunc = (DllFunc)::GetProcAddress(hdll, proc);
以上算是 C++ 代码吧. 虽然要改改,不过了为了对应好看所以就这么写了. 不过既然知道了 API 了, 那么 C++ 应该或多或少知道的吧.
对于 Ruby 就是要调用这个API, Win32API#Call 方法来调用. 其实就是类似函数或者是方法的调用. 相对 C++ 就是, _DllFunc(参数);
一个小小的例子: http://rpg.blue/forum.php?mod=re ... 6&fromuid=63926 122楼
至于说有什么 API 能用, 这个就要看 MSDN 了. 里面有详尽的 API 列表, 功能, 参数等信息. 前提是用的是 Windows 和 RGSS 能调用.
要自定义的话, 那么可以查阅相关语言的 DLL 编写指南.
|