2012-01-23 62 views
2

是否可以使用Ruby的Cocoa API將這些庫加載到FFI中?我知道你可以使用RubyCocoa或MacRuby訪問這些庫,但如果可能的話,我寧願堅持「普通」的ruby。我已經讀過RubyCocoa使用libffi(如果我沒有誤認爲FFI依賴的話)來使用這些庫,所以也許可以用FFI做同樣的事情。使用FFI從Ruby訪問可可?

謝謝!

回答

1

是的,但不是非常有用的方式。

這裏是一個全功能的例子:

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")