スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

LuaとObjective-Cのブリッジ(を公開した)

http://github.com/minoki/lobjc/tree/master
から落としてね。
現時点では、Mac OS X LeopardのIntelのNeXTランタイム以外は対応してません!
  • ビルド方法
    libffiが必要なのでMacPortsか何かで準備してね!
    $ make
    $ make install (または $ make local)

  • 使い方
    require "cocoa"
    require "cocoa:AppKit" -- AppKit.frameworkを読み込む

    cocoa.NSThread:sleepForTimeInterval_(2.0) -- [NSThread sleepForTimeInterval:2.0]と等価

    local t = {}
    local a = cocoa.NSMutableArray:new()
    a:addObject_(t) -- tに対応するラッパが作られ、aに追加される
    a:addObject_("hoge") -- NSStringに変換され、aに(ry
    a:addObject_(3.14) -- NSNumberに変(ry
    print(a:count()) -- 3
    for x in a:objectEnumerator() do
    print(type(x),x)
    end
    -- 自分でreleaseを呼び出す必要がない

    local s = cocoa.NSMakeSize(123,456) -- Cの関数も呼び出せる
    print(s[1],s[2]) -- 構造体のフィールドは番号でアクセスできる

    -- Cの関数を呼び出せるということは…
    local ffi = require "objc.runtime.ffi"
    local puts = ffi.loadfunction(ffi.RTLD_DEFAULT,"puts","ir*",1,false)
    puts("Hello world!")
    -- ただし、objc.runtime以下のAPIは勝手に仕様変更されうるので使うべきではない

  • 仕様
    • ObjCのnilはLuaのnilに自動的に変換される
    • Luaの文字列や数値がNSStringやNSNumberに変換されても、NSStringやNSNumberはLuaの文字列や数値には変換されない
      自動的に変換されたものは自動的に戻るようにしたい。
    • BridgeSupportの読み込みをLuaで実装しているため、LuaFileSystemとLuaExpatが必要
      そのうちCで書き直したい。
      LuaFileSystem : http://www.keplerproject.org/luafilesystem/
      LuaExpat : http://www.keplerproject.org/luaexpat/


スポンサーサイト

テーマ : プログラミング | ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

minoki

Author:minoki
好きなプログラミング言語:
Haskell,Lua
GitHubアカウント
Twitter

最新記事
月別アーカイブ
カテゴリ
検索フォーム
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。