设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: 晴兰
打印 上一主题 下一主题

[通用发布] 纯脚本不使用DLL就读取窗口消息

[复制链接]
头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

11
 楼主| 发表于 2011-12-21 23:16:08 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
369
在线时间
1605 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

12
发表于 2011-12-21 23:18:30 | 只看该作者
晴兰 发表于 2011-12-21 23:16
哦哦 原来如此 那也行 这个可以当C函数指针用
不过直接用RGSS3的Ruby写回调还是麻烦T_T ...

  1. module DL
  2.   SEM = Mutex.new



  3.   def set_callback_internal(proc_entry, addr_entry, argc, ty, abi = nil, &cbp)
  4.     if( argc < 0 )
  5.       raise(ArgumentError, "arity should not be less than 0.")
  6.     end
  7.     addr = nil


  8.       SEM.synchronize{
  9.         ary = proc_entry[ty]
  10.         (0...MAX_CALLBACK).each{|n|
  11.           idx = (n * DLSTACK_SIZE) + argc
  12.           if( ary[idx].nil? )
  13.             ary[idx] = cbp
  14.             addr = addr_entry[ty][idx]
  15.             break
  16.           end
  17.         }
  18.       }

  19.     addr
  20.   end

  21.   def set_cdecl_callback(ty, argc, &cbp)
  22.     set_callback_internal(CdeclCallbackProcs, CdeclCallbackAddrs, argc, ty, &cbp)
  23.   end

  24.   def set_stdcall_callback(ty, argc, &cbp)

  25.       set_callback_internal(StdcallCallbackProcs, StdcallCallbackAddrs, argc, ty, &cbp)

  26.   end

  27.   def remove_callback_internal(proc_entry, addr_entry, addr, ctype = nil)


  28.       index = nil
  29.       if( ctype )
  30.         addr_entry[ctype].each_with_index{|xaddr, idx|
  31.           if( xaddr == addr )
  32.             index = idx
  33.           end
  34.         }
  35.       else
  36.         addr_entry.each{|ty,entry|
  37.           entry.each_with_index{|xaddr, idx|
  38.             if( xaddr == addr )
  39.               index = idx
  40.             end
  41.           }
  42.         }

  43.       if( index and proc_entry[ctype][index] )
  44.         proc_entry[ctype][index] = nil
  45.         return true
  46.       else
  47.         return false
  48.       end
  49.     end
  50.   end

  51.   def remove_cdecl_callback(addr, ctype = nil)
  52.     remove_callback_internal(CdeclCallbackProcs, CdeclCallbackAddrs, addr, ctype)
  53.   end

  54.   def remove_stdcall_callback(addr, ctype = nil)
  55.     remove_callback_internal(StdcallCallbackProcs, StdcallCallbackAddrs, addr, ctype)
  56.   end

  57.   alias set_callback set_cdecl_callback
  58.   alias remove_callback remove_cdecl_callback
  59. end
复制代码
没测试过
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

13
 楼主| 发表于 2011-12-21 23:20:46 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
369
在线时间
1605 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

14
发表于 2011-12-22 00:06:00 | 只看该作者
晴兰 发表于 2011-12-21 23:20
新人先把大大的代码复制下来学习中

object_id???
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
1
星屑
6001
在线时间
2649 小时
注册时间
2013-8-23
帖子
2315

开拓者

15
发表于 2013-8-24 14:03:02 | 只看该作者
看不懂..
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-6-29 13:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表