[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:000745] [j00y1210@xxxxxx: Re: DCL 拡張ライブラリの使い方]



塩谷です. 

小塚さんの方から dennou-ruby 宛てにメールを送ったらしいのですが, 

<dennou-ruby@xxxxxx>... Deferred: Invalid argument
Warning: message still undelivered after 4 hours
Will keep trying until message is 5 days old

というメッセージとともに返ってきてしまたようなので, 私の方から彼が投函
したかった中身を投げてみます. 

何かトラブルでもあったのでしょうか?

------- Forwarded Message

> 上記のようなデザインを取ったとして, 「生成したソースを一切修正なしとい
> うことではすみそうにない」という指摘は, 結局のところ, 上の例でいうと
> NV が何の目的で使われるのか分からないとことでしょうか?
ちょっと言葉が足りませんでした。

int test(char *str, len);
のような関数があった場合、
Rubyからはtest(str)
のように見えるようラッピングすることがベターであるわけです。

が、将来拡張予定があるのかもしれませんが現状についていえば
SWIGのtypemap機能は引数同士の関係を定義することができないので
最初からStringから*str len両方に値を入れるようなコードを生成することはできません。

もっとも、typemapのignore機能によってlenをRubyでのラッパからは見えないようにする
つまり、Rubyのラッパ関数をtest(str)にするようにコードを生成することはできます。
ただし、この時点ではlenに適切な値が代入されないので、
(ignoreで$targetに指定した値が利用されたままになる)
この部分を自分の手で後から修正する必要があるということです。

先のメールを書いた時点ではどのくらいの修正をすればいいのか確証が持てなかったので
あのような書き方になってしまいましたが、
実際やってみたらすごく簡単な修正ですむことが分かりました。
今思うとそのことについてもう少し言及すべきだったような気がします。
余計なご心配をおかけして申し訳ありませんでした。

今、文字列とあわせて可変長の配列(長さを一緒にパラメータに取る)関数について
チュートリアルを書いているところです。詳細についてはもう少しお待ちください。
- --

京都大学 法学部 2回生 小塚真啓
KOZUKA Masahiro (j00y1210@xxxxxx)

------- End of Forwarded Message