[Gauche-devel-jp] Re: C から void* なデータを Scheme に渡すには?

Back to archive index

Makoto Satoh makot****@yahoo*****
2005年 4月 20日 (水) 09:59:20 JST


--- Shiro Kawai <shiro****@lava*****> からのメッセージ:
> From: Makoto Satoh <makot****@yahoo*****>
(snip) 
> > void* gdImageJpegPtr(gdImagePtr im, int *size, int quality)
> > 
> > というGDの関数のバインディングを作りたいのですが、void*な
> > データをどのように返せば良いでしょうか?
> 
> void*は、「俺(言語処理系)はこのデータの中身は知らないよ、自己責任で
> 使ってね」というデータ型なんで、Schemeレベルにそのまま見せるわけには
> いかないでしょう。Schemeオブジェクトはみんな自分が何者かを知っている
> はずですから。

なるほど。
何かのデータ構造を定義してみようかと思いましたが、JPEGフォーマットの
解説を見てもさっぱり分からないのであきらめました。

(snip)
> (2) u8vectorにマップする
>  u8vectorは一種のバイトベクタなので、Cでメモリブロックをバイト単位で
>  アクセスするのに近い感覚で使える。バイナリI/Oもできるし。
>  (u8vectorのelementsに、他者のアロケートしたメモリを直接入れた
>  場合のメモリ管理についてまだちゃんと考えてないので、もしこれをやるなら
>  Scm_MakeU8VectorFromArrayでメモリをコピーするようにして下さい)。
> 
> 現状で一番無難なのは(2)かなと思います。ただ、uvectorとは別に
> メモリブロックを扱うオブジェクトを導入しようかどうか思案している
> ので、今すぐにこのAPIのバインディングが必要でないなら後回しに
> してもいいかもしれません。

はい、後に回します。

一番使いたい方法は、HTMLに<img src="hoge.cgi">として画像を動的に生成・
表示することなので、それがportを使うAPIでできれば今のところ満足です。

上記のようなポインタを返すAPIは、FILE*を取りそこへイメージオブジェクトを
書き出すAPIと一対一に対応しています。
とりあえずFILE*を使うほうは実装済みなので上記のAPIをサポートするかは
その新しい方法を待つことにします。

--
佐藤



Gauche-devel-jp メーリングリストの案内
Back to archive index