[Top Page][All Pages][Recent Changes]

Edit History:Diff

Changes of uim/2009/10/13/ffi between 2009/10/13 00:28:43 JST and 2009/10/13 00:46:48 JST

Return to the edit history

  uimのschemeから共有ライブラリにアクセスするには、
  モジュールを作って(module-load)する、という方法が用意されているのだけど、
  そもそも共有ライブラリを作成できる言語処理系でないとモジュールを作成できないし、ちょっとライブラリを試したいだけなのにファイルを作るのはめんどう。
  
  ということで、uim-trunkにlibffiにアクセスするモジュールを投入した。
  
  [http://sources.redhat.com/libffi/ libffi]をインストール後、
  --with-ffiでconfigureしたuimをインストールすれば、
  uim-shから、
  
  {{{
  uim> (module-load "ffi")
  #t
  (define libm
         (dlopen "libm.so" (assq-cdr '$RTLD_LAZY (dlopen-mode))))
  libm
- uim> (define atan (dlsym libm "atan"))
- atan
- uim> (ffi-call 'double atan '((double . "1.0")))
+ uim> (ffi-function libm 'double "atan" '((double . "1.0")))
  "0.785398"
  uim> (dlclose libm)
  #t
  }}}
  
  とかできる。
  
  もちろん引数の数や型を間違えると即死するので注意が必要。
  
  - 無茶な例: [[gist:207980]] リトルエンディアンの32bitCPU前提だし、ここまでくるとモジュール作ったほうがいい。まねしちゃだめ。