Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > dl/importライブラリ > DL::Importableモジュール > callback

instance method DL::Importable#callback

callback(proto) -> DL::Symbol[permalink][rdoc]

[TODO]

与えられたプロトタイプにしたがって、自身のインスタンスメソッドを C のコールバック関数に変換し、DL::Symbol として返します。

[PARAM] proto:
C の関数プロトタイプを文字列で与えます。頭文字が大文字の場合は小文字に自動的に変換されます。
require 'dl/import'
module M
  extend DL::Importable
  dlload "libc.so.6"

  def cmp(a, b)
    a.ptr.to_s[-1] <=> b.ptr.to_s[-1]
  end
  callback 'int cmp(const char **, const char **)'
  extern 'void qsort(void *, int, int, void *)'
end

a = ['1b', '2a', '3c']
ap = a.to_ptr
M.qsort(ap, a.size, DL.sizeof('P'), M['cmp'])
p ap.to_a('P').map{|s| s.to_s } #=> ["2a", "1b", "3c"]