Module Dynlink


module Dynlink: sig .. end
オブジェクトファイルの動的読み込み

val is_native : bool
プログラムがネイティブコンパイルされていれば true、バイトコードであれば false になります。

コンパイル済みファイルの動的読み込み


val loadfile : string -> unit
バイトコード: 与えられたバイトコードオブジェクトファイル(.cmo ファイル)またはバイトコードライブラリファイル(.cma ファイル)を読み込み、実行中のプログラムにリンクします。 ネイティブコード: 与えられた OCaml プラグインファイル(通常 .cmxs)を読み込み、実行中のプログラムにリンクします。 読み込まれた翻訳単位のトップレベル式がすべて評価されます。 ただし、読み込まれた翻訳単位で定義されている値の名前にアクセスする方法はありません。 読み込まれた側で関数のテーブルを変更するなどしてエントリポイントをメインプログラムに登録しなければなりません。
val loadfile_private : string -> unit
loadfile と同じですが、読み込まれた翻訳単位が後で動的に読み込まれたモジュールから隠蔽されます(参照できなくなります)。
val adapt_filename : string -> string
バイトコード中では恒等関数になります。ネイティブコード中ではファイル名の拡張子を .cmxs に置き換えます。

アクセス制御


val allow_only : string list -> unit
allow_only units は動的リンクされた翻訳単位が参照することのできる範囲を制限し、 units 中に名前のある翻訳単位だけを参照できるようにします。 loadfile 中や loadfile_private 中に指定された以外の翻訳単位を参照しようとすると Unavailable_unit 例外が発生します。

初期状態(init を呼び出した直後)では、現在実行中のプログラムの要素である翻訳単位だけが動的リンクされた翻訳単位から参照できるようになっています。 allow_only は初期状態で指定されている翻訳単位の一部だけにアクセスできるようにすることにしか使えません。 すなわち、動的リンクされるコードに対する API を構成する翻訳単位にだけアクセスできるようにし、それ以外の実行中のプログラムの内部モジュールにはアクセスできないようにするために使います。

val prohibit : string list -> unit
prohibit units は動的ロードされる翻訳単位が units 中に名前のある翻訳単位にアクセスすることを禁止します。 この関数は、指定された翻訳単位を実行中のプログラムの内部モジュールとし、外部からアクセスできないようにするために使えます。
val default_available_units : unit -> unit
動的ロードされるコードから参照できる翻訳単位の範囲をデフォルト値、すなわち、現在実行中のプログラムを構成する全翻訳単位に再設定します。
val allow_unsafe_modules : bool -> unit
安全でないオブジェクトファイルを動的リンクできるかどうかを制御します。 ある翻訳単位が型安全性を破るような外部関数を含む場合、その翻訳単位は「安全でない」と言います。 デフォルトでは安全でないオブジェクトファイルの動的リンクは許可されていません。 ネイティブコードではこの関数は何もせず、外部関数を含むオブジェクトファイルの動的リンクは常に許可されています。

非推奨。アクセス制御のための低レベル API


val add_interfaces : string list -> string list -> unit
add_interfaces units path grants dynamically-linked object files access to the compilation units named in list units. The interfaces (.cmi files) for these units are searched in path (a list of directory names).
val add_available_units : (string * Digest.t) list -> unit
Same as Dynlink.add_interfaces, but instead of searching .cmi files to find the unit interfaces, uses the interface digests given for each unit. This way, the .cmi interface files need not be available at run-time. The digests can be extracted from .cmi files using the extract_crc program installed in the Objective Caml standard library directory.
val clear_available_units : unit -> unit
Empty the list of compilation units accessible to dynamically-linked programs.

非推奨。初期化


val init : unit -> unit
Deprecated.Dynlink ライブラリを初期化します。 この関数は必要に応じて自動的に呼び出されます。

エラーの通知



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
| Inconsistent_implementation of string
exception Error of error
動的リンク中のエラーはエラーの説明文字列を引数として Error 例外を発生させることにより報告されます。
val error_message : error -> string
エラーの説明を表示可能な文字列に変換します。