中村です。

swigruby でのファイルの扱いについて質問です。

wkf.i に
%name(guessKanjiCodeOfFile) extern kcode_t	wkfGuessKanjiCodeOfFile(FILE *);

と書いて swigruby-0.4.3 で wkf_wrap.c を生成したのですが、
ruby から呼び出す方法が良く分かりません。

f = open("hoge", "r")
Wkf.guessKanjiCodeOfFile(f)
とすると、
in `guessKanjiCodeOfFile': wrong argument type File (expected String) (TypeError)
と言われてしまうし、
# Check_Type(varg0, T_STRING); で引っかかる

Wkf.guessKanjiCodeOfFile("hoge")
とすると、
in `guessKanjiCodeOfFile': Expected a _FILE_p (TypeError)
と言われてしまうんですが…


該当する生成されたコードは以下の通りです。

static VALUE
_wrap_wkfGuessKanjiCodeOfFile(VALUE self, VALUE varg0) {
    VALUE vresult = Qnil;
    kcode_t  _result;
    FILE * _arg0;

    {
      Check_Type(varg0, T_STRING);
      if (SWIG_GetPtr(RSTRING(varg0)->ptr,(void **) &_arg0, "_FILE_p")) {
        rb_raise(rb_eTypeError, "Expected a _FILE_p");
      }
    }
    _result = (kcode_t )wkfGuessKanjiCodeOfFile(_arg0);
    vresult = INT2NUM(_result);
    return vresult;
}

       中村 典嗣  E-mail:     nnakamur / mxq.mesh.ne.jp