この章の目次にもどる
前頁:1.22 inner.h にもどる
次頁:第2章 アプリケーションライブラリにすすむ

1.23 dynload.h

《R4 で追加された機能》

ダイナミックリンクライブラリのサポートライブラリである。
ヘッダファイルは、btron/dynload.h

b_dlsearch
 
共有オブジェクトファイルの検索

【形式】

ERR b_dlsearch( TC *path, LINK *lnk, W mode )

【解説】

path で指定したライブラリファイル(共有オブジェクトファイル)を検索し、その LINK を lnk に返す。 path が相対パス指定のときは、mode で指定された場所を検索する。

	mode = [DL_BASE] | [DL_WORK] | [DL_PROC] | [DL_STDLIB]

	DL_BASE   (0x08)  lnk で指定したファイル
	DL_WORK   (0x04)  現在の作業ファイル
	DL_PROC   (0x02)  自プロセスのプログラムファイル
	DL_STDLIB (0x01)  標準ライブラリファイル /SYS/lib

	検索はこの並び順(DL_BASE → DL_STDLIB)で行われる。

なお、検索はファイル名でのみ行われる。ファイルの内容に関しては関知しない。
ファイルが見つからないときは ER_NOEXS を返す。

b_dlopen
 
共有オブジェクトのロード

【形式】

WERR b_dlopen( LINK *lnk, W flag )

【解説】

lnk で指定した共有オブジェクトを自プロセスのローカル空間にローディングする。戻値に、共有オブジェクトへのアクセスハンドル(>0)を返す。
lnk = NULL の場合はローディングを行わず、メインプログラムへのアクセスハンドルを返す。

	flag = ( DL_LAZY ‖ DL_NOW ) | [DL_GLOBAL]

	DL_LAZY   (1)	未確定シンボルを実行時に順次解決する。
			未確定シンボルが解決できなかった場合の動作は保証され
			ない。(通常は例外でプロセスが落ちる)
	DL_NOW    (2)	ローディング時にすべての未確定シンボルを解決する。
			未確定シンボルが解決できなかった場合は、b_dlopen() が
			エラーを返しローディングされない。
	DL_GLOBAL (0x100) シンボルをグローバルとする。
			ロードしたオブジェクトの外部シンボルを、他の共有オブ
			ジェクトからも参照できるようにする。

すでにロードされている共有オブジェクトと同じものをロードした場合、再度のローディングは行われず、同じハンドルが返される。

b_dlsym
 
共有オブジェクトのシンボル検索

【形式】

ERR b_dlsym( W handle, const char *symbol, UW *val )

【解説】

handle で指定した共有オブジェクトから symbol で指定したシンボルを検索し、その値を val に返す。
シンボルが見つからない場合は ER_NOEXS を返す。このとき、val には NULL を返す。

以下の特殊な handle が使用できる。

	DL_DEFAULT (0)	グローバルシンボルを検索する。
	DL_NEXT	   (-1)	自身より下の階層のシンボルを検索する。
b_dladdr
 
共有オブジェクトのアドレス情報の取得

【形式】

WERR b_dladdr( VP addr, DLINFO *info )

【解説】

addr で指定したアドレスを所有しているライブラリに関する情報を info に返す。また、戻値にその共有オブジェクトのアクセスハンドルを返す。
addr の位置に共有オブジェクトがなければ ER_NOEXS を返す。

	typedef struct {
		const LINK	*link;	/* ファイル */
		void		*fbase;	/* ベースアドレス */
		const char	*sname;	/* シンボル名 */
		void		*saddr;	/* シンボルのアドレス */
	} DLINFO;

	link	共有オブジェクトファイル
	fbase	共有オブジェクトのロードオフセット
	sname	addr の位置または addr より小さなアドレスで最も近い位置のシンボルの名称
	saddr	sname のシンボルの値(アドレス)
b_dlclose
 
共有オブジェクトのアンロード

【形式】

ERR b_dlclose( W handle )

【解説】

handle で指定した共有オブジェクトをアンロードする。
複数回 b_dlopen() されている場合、その回数分 b_dlclose() したとき始めてアンロードされる。


この章の目次にもどる
前頁:1.22 inner.h にもどる
次頁:第2章 アプリケーションライブラリにすすむ