From: Kouhei Sutou Date: 2008-01-18T20:48:31+09:00 Subject: [ruby-list:44513] Re: [ANN] rcairo 1.5.1 須藤です。 In <20080117223524718616.d84f5ec9@i.nifty.jp> "[ruby-list:44511] Re: [ANN] rcairo 1.5.1" on Thu, 17 Jan 2008 22:35:26 +0900, kimura wataru wrote: > > ところで、C言語からRubyCocoaと仲良くする方法なのですが、もう > > 少し便利な方法を提供してくれる予定はありますか? > 藤本さん?木村さん?lrz? > > > 予定はなかったのですが「今リクエストされた」ということで考えてみます。 ありがとうございます。 > つっこんだ話はrubycocoa-talk MLで議論したほうがコミッタの多くが > 参加できるので、そちらのほうが良いかもと思います。 英語では頑張れないのでこれ以上つっこまなくてすむならここです ませたいです。。。 で、ここですみそうだなぁと思っています。 > == RubyCocoaは絶対ある? > > 去年に発売された10.5からは、システムにはじめからインストールされて > いますが、それ以前ではそうではありません。 > > == 有無を検出する方法 > > あるかどうかを検出する方法は、すぐにはわからないです。スミマセン。 > 以前に別の拡張ライブラリで、Macの.frameworkを検出するものを > 見たような気がするのですが、探し出せませんでした。 とりあえず、-frameworkすればパスは知らなくてもよいということ なので、require "osx/cocoa"で検出することにしました。 > == オブジェクトの変換 > > 拡張ライブラリの.cの中で Ruby VALUE <=> ObjC id の変換をしたいと > いうことですよね。以下の関数のほうが良いはずです。 > ocobj_s_new()をRubyCocoaの外から呼びだすのは好ましくないです。 > > // framework/src/objc/ocdata_conv.h > > // VALUE -> id > BOOL rbobj_to_nsobj (VALUE obj, id* nsobj); > // id -> VALUE > VALUE ocid_to_rbobj (VALUE context_obj, id ocid); > > 後者のcontext_objはQnilを渡してください。 ありがとうございます。 どちらもはずれていましたね。残念。 それらを使うように変更しました。 > == ヘッダのインクルード > > Macの.frameworkを利用するときは > > #include > > のように書くことでヘッダファイル > > (どこか)/RubyCocoa.framework/Headers/ruby-cocoa.h > > をインクルードできます。場所は通常コンパイラが解決してくれるので > -I は不要です。 > リンカオプションとして -framework RubyCocoa の指定が必要です。 .frameworkはそこまで頑張るんですか。 いろいろ勉強になりました。ありがとうございます。