module Dynlink: sig end
バイトコードオブジェクトファイルの動的ロードです。
val init : unit -> unit
ライブラリを初期化します。loadfile
の前に呼んでください。
val loadfile : string -> unit
与えられたバイトコードオブジェクトファイルをロードしてリンクします。
ロードされたコンパイルユニットのトップレベル式がすべて評価されます。
ユニットが定義する値の名前にアクセスする機能はありません。よって、ユニットは自分で自分のエントリーポイントをメインプログラムに登録しなければなりません。例えば、関数テーブルを書き換えるなどしてください。
val loadfile_private : string -> unit
loadfile
と同じですが、これでロードされたモジュールは今後動的ロードされる別のモジュールにアクセスできません。
val add_interfaces : string list -> string list -> unit
add_interfaces units path
は動的リンクされたオブジェクトファイルが
units
にある名前のコンパイルユニットへアクセスできるようにします。そのユニットのインターフェイス (
.cmi
) は
path
(ディレクトリ名のリスト) を検索します。初期状態では、動的リンクされたオブジェクトファイルは実行プログラムのどのコンパイルユニットにも (標準ライブラリすら) アクセスできません。
add_interfaces
か
Dynlink.add_available_units
(以下参照) を呼んでユニットにアクセスできるようにする必要があります。
val add_available_units : (string * Digest.t) list -> unit
Dynlink.add_interfaces
と同じですが、, ユニットのインターフェイスを見つけるために
.cmi
ファイルを探すのではなく、それぞれのユニットが持つインターフェイスダイジェストを使います。この方法だと、実行時に
.cmi
インターフェイスファイルは必要ありません。
extract_crc
を使えばダイジェストを
.cmi
ファイルから取り出すことができます。
extract_crc
は Objective Caml 標準ライブラリディレクトリ中にインストールされています。
val clear_available_units : unit -> unit
動的リンクされたプログラムがアクセス可能なコンパイルユニットのリストをクリアします。
val allow_unsafe_modules : bool -> unit
安全でないオブジェクトファイルの動的リンクを許すかどうか決定します。外部関数の宣言を持つコンパイルユニットは安全ではありません。型の安全性を壊す可能性があります。デフォルトで、安全でないオブジェクトファイルの動的リンクは許されていません。
type linking_error =
| |
Undefined_global of string |
| |
Unavailable_primitive of string |
| |
Uninitialized_global of string |
type error =
| |
Not_a_bytecode_file of string |
| |
Inconsistent_import of string |
| |
Unavailable_unit of string |
| |
Unsafe_file |
| |
Linking_error of string * linking_error |
| |
Corrupted_interface of string |
| |
File_not_found of string |
| |
Cannot_open_dll of string |
exception Error of error
この例外 Error
は動的リンク中で発生したエラーの説明を伝えるために発生します。
val error_message : error -> string
エラーの説明を表示可能なメッセージ文に変換します。