From: Eiji-usagi-MATSUmoto Date: 1997-08-25T13:09:39+09:00 Subject: [ruby-dev:235] Re: How to handle Struct うさぎです。 matz@netlab.co.jp (Yukihiro Matsumoto) said: > うさぎさんって既婚だったんだ….^^;;; 1歳の娘がいる1児のパパです:-) > しまった.C側から参照するAPIを用意していなかった ^^;;; あぁ、よかった。なんとか自分で解決しようとして、ハマルところ でした。 > VALUE struct_member(VALUE obj, ID mem) > > という感じで,第1引数はstruct,第2引数はメンバ名を示すIDです. > IDはrb_intern()を使って得て下さい. えーと、こんな風でいいんでしょうか? rubyのソース側が、こんな風になっていたとして、 -- psql.rb -- PrintOpt = Struct.new("PrintOpt", :header, :align, :standard, :html3, :expanded, :pager, :fieldSep, :tableOpt, :caption, :fieldName) opt = PrintOpt.new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) 途中省略 ... result.print(opt) C側で、こんな風に受け取ると。 -- postgres.c -- static VALUE pgresult_print(obj, opt) VALUE obj, file, opt; { VALUE value; ID mem; Check_Type(opt, T_STRUCT); mem = rb_intern("PrintOpt.header"); value = struct_member(obj, mem); int num = NUM2INT(value); } #実際はちょっとちがうんですけど。 -- Eiji MATSUmoto PFU Limited, Ishikawa Japan. < Call me 'USAGI' please. (^^) >