[#44431] コンストラクタの引数について&インスタンス変数の持ち方について — Akira Hayakawa <ruby@...>

度々オブジェクト指向についての質問ですいません。

17 messages 2008/01/04
[#44433] Re: コンストラクタの引数について&インスタンス変数の持ち方について — Yukihiro Matsumoto <matz@...> 2008/01/04

まつもと ゆきひろです

[#44469] pdf 作成 ライブラリ — "Luiz Aoki" <luizruby@...>

はじめまして、青木ルイスと申します、

14 messages 2008/01/12
[#44479] ファイル出力時のprintについて — m-hatake@... 2008/01/16

畠山と申します。

[#44483] format %g の丸めについて — 山崎雄介 <y-yamasaki@...>

山崎(ゆ)です。

14 messages 2008/01/16

[ruby-list:44511] Re: [ANN] rcairo 1.5.1

From: kimura wataru <kimuraw@...>
Date: 2008-01-17 13:35:26 UTC
List: ruby-list #44511
木村わ@RubyCocoaプロジェクトです。

On Fri, 11 Jan 2008 22:53:05 +0900, Kouhei Sutou wrote:
> 須藤です。
> 
> 
> Quartzサポートですが、近くにMac OS Xがあったので勘で触りなが
> らそれっぽく動くようにしたものなのでちゃんと動かないかもしれ
> ません。Objective-CとかCocoaとかわかりませんし。
> とりあえず、Ruby/Cocoaと一緒に使えるようにしました。
> 
おおー、X11無しで使えるようになるということですね。素晴らしいです。

> ところで、C言語からRubyCocoaと仲良くする方法なのですが、もう
> 少し便利な方法を提供してくれる予定はありますか? > 藤本さん?木村さん?lrz?
> 
予定はなかったのですが「今リクエストされた」ということで考えてみます。
つっこんだ話はrubycocoa-talk MLで議論したほうがコミッタの多くが
参加できるので、そちらのほうが良いかもと思います。

> やってみて、こんなのが欲しかったです。
> 
>   * extconf.rbでRubyCocoaフレームワークがある場所を検出する
>     方法
> 
>     今は、RubyCocoaフレームワークがあるかどうかを検出せずに
>     いつも-framework RubyCocoaしています。まぁ、絶対入ってい
>     るいると思っていいのかしら。
> 
>       $DLDFLAGS << " -Wl,-framework,RubyCocoa"
> 

== RubyCocoaは絶対ある?

去年に発売された10.5からは、システムにはじめからインストールされて
いますが、それ以前ではそうではありません。

== 有無を検出する方法

あるかどうかを検出する方法は、すぐにはわからないです。スミマセン。
以前に別の拡張ライブラリで、Macの.frameworkを検出するものを
見たような気がするのですが、探し出せませんでした。

>   * Rubyオブジェクト <-> Objective-Cオブジェクト変換関数
> 
>     ざっくりながめた感じだとocobj_s_new()とrbobj_get_ocid()
>     なんじゃないかと思って、自分でプロトタイプ宣言をして使い
>     ました。.cから#include <ruby-cocoa.h>とかして使えると嬉
>     しいです。そうすると、ruby-cocoa.hがある場所を-I...でき
>     る方法も欲しくなるわけですが。
> 

== オブジェクトの変換

拡張ライブラリの.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を渡してください。


別の方法としては、BridgeSupport[*1]のXMLファイルを用意することで、
拡張モジュールを書かなくても、CやObjective-CライブラリがRubyから
利用できるようになります。そうするとPure Rubyで記述できます。
現在のRubyCocoaでは、CoreGraphicsなどがこの方法で提供されています。

今回の須藤さんのケースでは、Cで拡張ライブラリを書いていて、その一部
としてRubyCocoaの機能を使いたい、ということのようなので、ここでは
あまり適した案とはいえなさそうですけれども参考まで。

  [*1] http://trac.macosforge.org/projects/bridgesupport

== ヘッダのインクルード

Macの.frameworkを利用するときは

  #include <RubyCocoa/ruby-cocoa.h>

のように書くことでヘッダファイル

  (どこか)/RubyCocoa.framework/Headers/ruby-cocoa.h

をインクルードできます。場所は通常コンパイラが解決してくれるので
-I は不要です。
リンカオプションとして -framework RubyCocoa の指定が必要です。

-- 
kimura wataru

In This Thread