2
是否可以使用Ruby的Cocoa API將這些庫加載到FFI中?我知道你可以使用RubyCocoa或MacRuby訪問這些庫,但如果可能的話,我寧願堅持「普通」的ruby。我已經讀過RubyCocoa使用libffi(如果我沒有誤認爲FFI依賴的話)來使用這些庫,所以也許可以用FFI做同樣的事情。使用FFI從Ruby訪問可可?
謝謝!
是否可以使用Ruby的Cocoa API將這些庫加載到FFI中?我知道你可以使用RubyCocoa或MacRuby訪問這些庫,但如果可能的話,我寧願堅持「普通」的ruby。我已經讀過RubyCocoa使用libffi(如果我沒有誤認爲FFI依賴的話)來使用這些庫,所以也許可以用FFI做同樣的事情。使用FFI從Ruby訪問可可?
謝謝!
是的,但不是非常有用的方式。
這裏是一個全功能的例子:
require 'ffi'
module ObjC
extend FFI::Library
ffi_lib 'objc'
attach_function :sel_registerName, [:string], :pointer
attach_function :objc_msgSend, [:pointer, :pointer, :varargs], :pointer
def self.msgSend(id, selector, *args)
selector = sel_registerName(selector) if selector.is_a? String
return objc_msgSend(id, selector, *args)
end
attach_function :objc_getClass, [:string], :pointer
end
module Cocoa
extend FFI::Library
ffi_lib '/System/Library/Frameworks/Cocoa.framework/Cocoa'
attach_function :NSApplicationLoad, [], :bool
NSApplicationLoad()
end
pool = ObjC.msgSend(ObjC.msgSend(ObjC.objc_getClass("NSAutoreleasePool"),"alloc"),"init")
application = ObjC.msgSend(ObjC.objc_getClass("NSApplication"),"sharedApplication")
ObjC.msgSend(application,"run")