我在使用Ruby设置FFI结构时遇到了一些初学者问题。我想要做的是通过在FFI :: Struct对象设置一个字符串属性传递一个指向C字符串:Ruby Noobie:如何在FFI Struct中设置字符串值
class SpSessionConfig < FFI::Struct
layout :api_version, :int,
:cache_location, :string,
:settings_location, :string,
:application_key, :pointer,
:application_key_size, :int,
:user_agent, :string,
:sp_session_callbacks, :pointer,
:user_data, :pointer
end
end
sessionConf = SpotifyLibrary::SpSessionConfig.new()
puts sessionConf # => '#<SpotifyLibrary::SpSessionConfig:0x9acc00c>'
sessionConf[:api_version] = 1
puts "Api Version: #{sessionConf[:api_version]}"
myTempDir = "tmp"
sessionConf[:cache_location] = myTempDir # !Error!
但是当我运行的代码我得到这个错误:
jukebox.rb:44:in `[]=': Cannot set :string fields (ArgumentError)
from jukebox.rb:44:in `<main>'
所以我不知道该从哪里出发。
另外,如果你知道任何关于这个问题的好的文档或教程,请留下回复!到目前为止,我发现在Project Kenai 上的wiki文档非常有用,但越多越好!
谢谢!
我试图将字符串数据成员声明为[:焦炭,5]但是,让另一个错误:
jukebox.rb:44:in `put': put not supported for FFI::StructLayoutBuilder::ArrayField_Signed8_3 (ArgumentError)
from jukebox.rb:44:in `[]='
from jukebox.rb:44:in `<main>
有一个很好的建议,尝试内存指针类型,我会尝试,今天下班后。
我喜欢你的标题。伟大的韵律! – jjnguy 2009-04-13 20:45:16