From: Noritsugu Nakamura Date: 1997-09-27T09:43:56+09:00 Subject: [ruby-list:4701] XeasyGraphic module 中村です。 だいたい XeasyGraphic モジュールの形ができてきたのですが、 コンパイル時に warning がでます。ということで、独力で 解決しなかったので、質問です。 データ領域取得と解放、および、line を引く関数は 次のようにしました。 static void free_img(id win) { if (win) { GrWindowClose(win); } } static VALUE img_s_new(VALUE class,int x, int y, int w, int h) { id win; win = GrWindow(NUM2INT(x), NUM2INT(y), NUM2INT(w), NUM2INT(h)); return Data_Wrap_Struct(class, 0, free_img, win); } static VALUE img_line(VALUE win, int x1, int y1, int x2, int y2, int lw, int colorId, struct RArray *color_p) { id w; Data_Get_Struct(win, id, w); set_color(color_p); GrLine(w, NUM2INT(x1), NUM2INT(y1), NUM2INT(x2), NUM2INT(y2), NUM2INT(lw), NUM2INT(colorId), color); } で、関数の引き数と戻り値は GrWindowClose(id wid) wid = GrWindow() GrLine(id wid, ...) となっています。id はヘッダ部で、int に typedef されています。 で、コンパイル時に出るエラーは次のようなものです。 Xeg.c:44: warning: passing arg 2 of `data_object_alloc' makes pointer from integer without a cast Xeg.c: In function `img_line': Xeg.c:53: warning: assignment makes integer from pointer without a cast ちなみに line 44 は return Data_Wrap_Struct(class, 0, free_img, win); line 53 は Data_Get_Struct(win, id, w); です。 根本的に使いかたを間違えていて、たまたま 動いている気がするのですが、ポインタで 受けようとすると、失敗してしまうので…。 これだけの情報では訳が分からないかもしれないので、 作りかけのやつを http://www2s.biglobe.ne.jp/~Nori/ruby/Xeg.tar.gz に置いておきます。 ということで、よろしくお願いします。 # やはり初心者がモジュールを作るのは無理だったか!? 中村典嗣 E-mail: nnakamur@mxq.meshnet.or.jp