そして渡すコールバック関数のポインタは、staticな領域もしくはClassで生成するdelegeteしたポインタを管理する事で実現できる。(ガベージコレクションにてポインタ回収されるのを防ぐ)
参照元:http://jp.rubyist.net/magazine/?0021-RubyWithCSharp#f05
----
private static List
public delegate VALUE CallbackArg0(VALUE self);
[DllImport(RubyDll)]
private static extern void rb_define_method(VALUE klass, string name, CallbackArg0 func, int argc);
public static void rb_define_method(VALUE klass, string name, CallbackArg0 func)
{
MethodDelegates.Add(func);
rb_define_method(klass, name, func, 0);
}
// 使い方
Ruby.rb_define_method(rb_cString, "show_message", delegate(VALUE self)
{
MessageBox.Show(Ruby.StringValuePtr(self));
return Ruby.Qnil;
});
0 件のコメント:
コメントを投稿