[#46647] RubyでWindowsの常駐サービスプログラムを作る方法 — kouichi_someya@...

はじめまして。

12 messages 2009/12/16
[#46649] Re: RubyでWindowsの常駐サービスプログラムを作る方法 — "U.Nakamura" <usa@...> 2009/12/17

こんにちは、なかむら(う)です。

[ruby-list:46717] Re: 拡張ライブラリで引数の数が違うオーバーロード関数の定義の仕方に関する質問

From: ueda <tueda@...>
Date: 2009-12-28 06:04:51 UTC
List: ruby-list #46717
教えてもらった方法でいけました。
結局問題はRubyの可変長引数をC++側から取り扱う方法がよくわかってなかった
のが原因のようです。

(1) 関数の登録の引数の個数は-1を指定
rb_define_singleton_method (rb_cLoader, "load",
(VALUE(*)(...))binder_Loader_load, -1);

(2) ラッパー関数で引数の個数をチェックして分岐(引数が同数の場合はさらに
型チェック)
VALUE binder_Loader_load (int argc, VALUE* argv, VALUE self)
{
VALUE val_name, val_data, val_offset;

if (rb_scan_args (argc, argv, "10*", &val_name) == 1) {
printf ("引数は1個\n");
return Qnil;
}
else if (rb_scan_args (argc, argv, "20", &val_data, &val_offset) == 2) {
printf ("引数は2個\n");
return Qnil;
}
else {
printf ("引数はそれ以外。ここには来ない\n");
return Qnil;
}
}

より詳しい情報は README.EXT.ja を参照ということで。
ありがとうございました。おかげで助かりました。



In This Thread