Ruby Ruby::Fiddle::Pointer 问题

wujian_hit · 2013年06月17日 · 最后由 wujian_hit 回复于 2013年06月19日 · 3575 次阅读

各位大神,我在使用 ruby Fiddle 封装一个 C 库时,遇到一个问题。描述如下:

我要封装如下一个函数:

有一个 c source code 定义了结构体 A,还有一函数原型为:struct A* func(char*);
函数中将处理后的多个结果保存在一个一个的结构体中,因此它 malloc 了一块大小为 n*sizeof(A) 的内存,最后它将指向这一大块内存的指针 p 返回 (p 的类型为 A*)。
在 c 中使用时,用类型为 A*的指针遍历这块内存取出每个结构体中的结果数据即可。

我使用了 Fiddle 中的 CStruct 定义了这个结构体 A,用一个变量接收到该函数的返回值,然后将该变量包装为一个 Fiddle::Pointer,现在的问题是,我如何让这个 Fiddle::Pointer 的类型变为 A*?然后读出指针指向内存中的内容。

查了很久,网上关于 Fiddle 的文档和例程很少,Ruby 官方的文档给出的也不详细。希望能有朋友帮忙。

部分从文档中抄来的:

require "fiddle/struct"
require "fiddle/cparser"
include Fiddle::CParser

types, members = parse_struct_signature ['int i', 'char c']
A = Fiddle::CStructBuilder.create Fiddle::CStruct, types, members

pointer = Fiddle::Pointer.malloc 5
a = A.new pointer
p a.i
p a.c

@luikore 感谢!A.new pointer

你好,我是猎头新茹,有个 ruby 的职位想推荐给你,这个是我手机 15001259395,期望你的回复。

@xinru123 感谢您的关注,不过我现在还在读大学。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号