Ruby Ruby::Fiddle::CStruct undefined method `[]'

wujian_hit · 2013年05月07日 · 最后由 wujian_hit 回复于 2013年05月07日 · 3121 次阅读

我用 ruby2.0.0p0`s fiddle 类去封装一个c的 dll, 当我用 fiddle::CStruct 去封装一个C struct 的时候遇到了一个奇怪的问题。

精简的代码如下:

require "fiddle" require "fiddle/import" require 'fiddle/struct'

types=[Fiddle::TYPE_INT,Fiddle::TYPE_INT] members = ["id","name"]

MyStruct = Fiddle::CStructBuilder.create(Fiddle::CStruct, types, members) obj = MyStruct.allocate

puts obj.methods puts obj.id

我打印了 obj 的 methods, 结果包含了 id 和 id= 这两个方法,可当我调用 id或 id=方法时,它抛出了一个异常 "ruby-2.0.0-p0/lib/ruby/2.0.0/fiddle/struct.rb:59:in block (3 levels) in create': undefined method[]' for nil:NilClass (NoMethodError)" . 我不知道问题出在哪里。

我粗略的看了下代码:

Allocates space for a new object of class’s class and does not call initialize on the new instance. The returned object must be an instance of class.

allocates 不执行 initialize 方法,导致 @entity 为 空。试试这个 obj = MyStruct.malloc 目测可能可以。

#1 楼 @zgm bingo~,谢谢您的指点。malloc 后完全好了。

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