Project1

标题: 可以dll调用类的方法么 [打印本页]

作者: secondsen    时间: 2009-10-21 14:12
标题: 可以dll调用类的方法么
RT
把一个类作参数传给Dll,dll可以调用此类的方法
这有办法实现么
作者: 紫苏    时间: 2009-10-22 02:54
本帖最后由 紫苏 于 2009-10-22 03:00 编辑

你在 DLL 映射到 RM 进程地址空间后中,再加载一下 RGSS****.DLL(system32 下的那个),然后调用其中的 RGSSEval 函数即可动态解释 RM 的脚本了,前提是类已经建立了
作者: secondsen    时间: 2009-10-23 09:25
这个。。。不太明白。。。
作者: 紫苏    时间: 2009-10-23 09:54
本帖最后由 紫苏 于 2009-10-23 09:55 编辑

比如你在你的的 DLL 导出函数中这样写:

  1. HMODULE hModule = LoadLibrary("RGSS****.dll");
  2. int (*RGSSEval)(void);
  3. RGSSEval = (int (*)(void))GetProcAddress(hModule, "RGSSEval");
  4. *RGSSEval("a = A.new; a.fn");
复制代码
然后 RM 脚本中:

  1. class A
  2.   def fn
  3.     p "hola mundo"
  4.   end
  5. end
  6. MyDLLFn = Win32API.new( ... )
  7. MyDLLFn.call                                    # => "hola mundo"
复制代码

作者: secondsen    时间: 2009-10-23 17:55
谢谢,十分感谢!
作者: secondsen    时间: 2009-10-23 18:00
本帖最后由 secondsen 于 2009-10-23 20:03 编辑

那如果

我之前定义了一个方法

def eval(string)
  p string
end

那么用这个方法的话。。。就会执行我定义的def eval(string)么???

我用的是别人的电脑自己没有办法做实验,只好来问问题了。。。
作者: 紫苏    时间: 2009-10-24 07:21
嗯,你给 RGSSEval 传递的是一个 LPTCSTR,在这个字符串里面你可以尽情地写下 Ruby 脚本
作者: 灼眼的夏娜    时间: 2009-10-27 08:20
紫苏小问题:int (*RGSSEval)(void);不能接受参数。。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1