[トップ][一覧][最近の更新]

編集履歴:差分

記録開始以来のuim/2009/10/13/ffiの変更箇所

編集履歴ページに戻る

+ 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> (ffi-function libm 'double "atan" '((double . "1.0")))
+ "0.785398"
+ uim> (dlclose libm)
+ #t
+ }}}
+ 
+ とかできる。
+ 
+ もちろん引数の数や型を間違えると即死するので注意が必要。
+ 
+ - 無茶な例: [[gist:207980]] リトルエンディアンの32bitCPU前提だし、ここまでくるとモジュール作ったほうがいい。まねしちゃだめ。