У меня проблемы с новичком при настройке структуры FFI в Ruby. То, что я хочу сделать, это передать указатель на строку C, установив свойство строки в объекте 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
очень полезно, но чем больше, тем лучше!
Спасибо!
Я пытался объявить строковые данные как [: char, 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>
Есть хорошее предложение попробовать тип указателя памяти, и я попробую это после сегодняшней работы.