| 
 
| 赞 | 0 |  
| VIP | 2 |  
| 好人卡 | 27 |  
| 积分 | 1 |  
| 经验 | 26327 |  
| 最后登录 | 2019-10-13 |  
| 在线时间 | 953 小时 |  
 Lv1.梦旅人 
	梦石0 星屑120 在线时间953 小时注册时间2007-4-25帖子805 | 
| 你的“Win32API.读”八成是返回了一个字符串指针,所以 ip 保存的是指向该字符串的整数地址。SetWindowText 的第二个参数接受一个字符串指针,所以直接传递地址没有问题。 
 你如果想继续使用 “Win32API.读” 返回的地址,可以通过 RtlMoveMemory 反引用到其指向的字符串,并拷贝到另一个缓冲区中,但我怀疑你这个字符串是在堆中动态分配的,有内存泄漏的倾向。通常如果本地扩展想要返回给 Ruby 层的调用者字符串内容时,都是通过操纵 Ruby 传递给本地扩展的一个预分配缓冲区来实现的,这样由于缓冲区是 Ruby 的字符串对象,其资源由 GC 妥善管理,不用考虑释放的问题。
 复制代码
buf = ' ' * 256     # 分配一个够大的缓冲区
foo.call(buf, ...)  # foo 并不直接返回字符串地址,而是变异 buf
p buf               # 此时 buf 已包含 foo 期望返回给调用者的字符串内容
 | 
 |