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

Project1

 找回密码
 注册会员
搜索
查看: 1624|回复: 3
打印 上一主题 下一主题

[已经解决] dll模块返回的变量使用,一个奇怪的问题。

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
34 小时
注册时间
2010-9-30
帖子
48
跳转到指定楼层
1
发表于 2011-3-31 17:33:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

点评

能不能换个头像?  发表于 2011-3-31 21:03

Lv1.梦旅人

梦石
0
星屑
50
在线时间
34 小时
注册时间
2010-9-30
帖子
48
2
 楼主| 发表于 2011-3-31 18:37:17 | 只看该作者
如上图这样通过dll取到网络数据,但是用rpg xp输出的不是ip,而是一串数字。求解。而把这个变量设置为窗口标题,窗口标题显示的却是ip。

哪位大哥帮我看一下,谢谢。
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
3
发表于 2011-3-31 20:35:38 | 只看该作者
你的“Win32API.读”八成是返回了一个字符串指针,所以 ip 保存的是指向该字符串的整数地址。SetWindowText 的第二个参数接受一个字符串指针,所以直接传递地址没有问题。

你如果想继续使用 “Win32API.读” 返回的地址,可以通过 RtlMoveMemory 反引用到其指向的字符串,并拷贝到另一个缓冲区中,但我怀疑你这个字符串是在堆中动态分配的,有内存泄漏的倾向。通常如果本地扩展想要返回给 Ruby 层的调用者字符串内容时,都是通过操纵 Ruby 传递给本地扩展的一个预分配缓冲区来实现的,这样由于缓冲区是 Ruby 的字符串对象,其资源由 GC 妥善管理,不用考虑释放的问题。

  1. buf = ' ' * 256     # 分配一个够大的缓冲区
  2. foo.call(buf, ...)  # foo 并不直接返回字符串地址,而是变异 buf
  3. p buf               # 此时 buf 已包含 foo 期望返回给调用者的字符串内容
复制代码
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复

使用道具 举报

Lv1.梦旅人

简史

梦石
0
星屑
120
在线时间
422 小时
注册时间
2008-7-4
帖子
736

开拓者

4
发表于 2011-4-1 15:33:49 | 只看该作者
既然你都会调用DLL了,何必要用RM来取IP,你直接用DLL本身取IP不好么?
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-25 12:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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