Project1
标题:
dll模块返回的变量使用,一个奇怪的问题。
[打印本页]
作者:
6928233
时间:
2011-3-31 17:33
标题:
dll模块返回的变量使用,一个奇怪的问题。
dll返回值的奇怪问题.jpg
(34.27 KB, 下载次数: 1)
下载附件
保存到相册
2011-3-31 17:33 上传
dsu_plus_rewardpost_czw
作者:
6928233
时间:
2011-3-31 18:37
如上图这样通过dll取到网络数据,但是用rpg xp输出的不是ip,而是一串数字。求解。而把这个变量设置为窗口标题,窗口标题显示的却是ip。
哪位大哥帮我看一下,谢谢。
作者:
苏小脉
时间:
2011-3-31 20:35
你的“Win32API.读”八成是返回了一个字符串指针,所以 ip 保存的是指向该字符串的整数地址。SetWindowText 的第二个参数接受一个字符串指针,所以直接传递地址没有问题。
你如果想继续使用 “Win32API.读” 返回的地址,可以通过 RtlMoveMemory 反引用到其指向的字符串,并拷贝到另一个缓冲区中,但我怀疑你这个字符串是在堆中动态分配的,有内存泄漏的倾向。通常如果本地扩展想要返回给 Ruby 层的调用者字符串内容时,都是通过操纵 Ruby 传递给本地扩展的一个预分配缓冲区来实现的,这样由于缓冲区是 Ruby 的字符串对象,其资源由 GC 妥善管理,不用考虑释放的问题。
buf = ' ' * 256 # 分配一个够大的缓冲区
foo.call(buf, ...) # foo 并不直接返回字符串地址,而是变异 buf
p buf # 此时 buf 已包含 foo 期望返回给调用者的字符串内容
复制代码
作者:
clande
时间:
2011-4-1 15:33
既然你都会调用DLL了,何必要用RM来取IP,你直接用DLL本身取IP不好么?
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1