SSブログ

F# から FFI で Tcl を呼ぶ [OCaml]

SML# の FFI も簡単だった [1] けど F# の FFI も簡単。

module Tcl = begin

  open System.Runtime.InteropServices
  open Microsoft.FSharp.NativeInterop

  [<DllImport(@"C:\\Tcl\\bin\\tcl84.dll", EntryPoint="Tcl_CreateInterp")>]
  extern void* CreateInterp();

  [<DllImport(@"C:\\Tcl\\bin\\tcl84.dll", EntryPoint="Tcl_Eval")>]
  extern int Eval(void*, string);

  [<DllImport(@"C:\\Tcl\\bin\\tcl84.dll", EntryPoint="Tcl_GetStringResult")>]
  extern string GetStringResult(void*);

end

let _ =
  let interp = Tcl.CreateInterp() in
  Tcl.Eval(interp, "puts {Hello World}"); (* -> Hello World *)
  Tcl.Eval(interp, "puts xxx {Hello World}");
  print_string(Tcl.GetStringResult(interp)) (* -> can not find channel named "xxx" *)

F# 1.9.1.8 で動作させています。C 風の定義(が書ける!)の中に string 型とか埋め込んでしまってるのは勘で書いてみたらうまく動いている風なのですが、ひょっとしたらお作法に違反している可能性も。

F# は LINQ を統合していたり配列のパターンマッチが書けたりなど OCaml とは別の言語として進化しているようで何より。[2007-05-25追記] ここは一部勘違いでOCamlでも普通に配列のパターンマッチはできた。

なお、この記事は F# News の記事 [2] を参考にしました。

[1] http://blog.so-net.ne.jp/rainyday/2007-03-31
[2] http://fsharpnews.blogspot.com/2007/04/foreign-function-interface-ffi.html


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

Ruby による LFGWindows PowerShell 雑.. ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。