SML# - Language/FFI/DynamicLink Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

動的リンクライブラリ(Unix系システムではxxx.soファイル,Windowsシステ
ムではxxx.dllファイル)をロードするには以下のライブラリを使用する.
  structure DynamicLink
  : sig
      val dlclose : unit ptr  -> unit
      val dlopen : string  -> unit ptr
      val dlsym : unit ptr * string  -> unit ptr
    end
ここで,
* dlopen(libName) はlibNameで与えられた文字列をファイルパスと見なし,動的リンクライブラリをオープンしそのポインタを返す.ライブラリのオープンに失敗した場合はその原因をSysErr例外で通知する.
* dlsym(libPtr, funnName)は,libPtrが指す動的リンクライブラリの中のfunnNameを持つ関数ポインタを返す.関数ポインタの取り出しに失敗した場合はその原因をSysErr例外で通知する.
* dlclose(libPtr) はlibPtrが指す動的リンクライブラリをクローズする.

!!名前の解決.

ライブラリ名の解決の方法およびライブラリのオープン処理の詳細は処理系依存である.
Unix系の処理系の場合,'dlopen'および'dlsym'を用いライブラリファイルをアクセスする.
[[通常のファイルパスの解決処理|PathResolution]]ではなく,
環境変数LD_LIBRARY_PATHに束縛されたパスのリストを用いたファイルパスの解決を行う.

!!FFIライブラリ.
DynmicLinkは[[FFIライブラリ|Library/FFI]]の一つとして実装されている.
FFIライブラリには,外部関数の使用に関する種々のユーテリティライブラリが提供されている.