コマンドの拡張
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/10 13:51 UTC 版)
コマンドには、Tcl パーサーにあらかじめ実装されているビルトインコマンドと、ユーザーにより作成された拡張コマンドがある。ユーザーによる拡張コマンドの実装は簡単である。まず、C言語などで「コマンド本体関数」と「登録用関数」を記述し、ダイナミックリンクライブラリファイルに格納する。そして組み込みコマンドの load を用いて拡張コマンドを登録する。 load hello.dll hello load コマンドの引数には、「ライブラリファイル名」と「登録用コマンド名」を与える。load コマンドは、登録用コマンド名から「登録用関数」名を求め、これを実行してくれる。例えば hello コマンドであれば Hello_Init を実行してくれる。この「登録用関数」の中に本当の登録処理を記述しておく。従って、例えば load コマンドに渡したコマンド名にライブラリ名の意味を持たせ、「登録用関数」の中で複数のコマンドを登録してしまうことも可能である。 「本当の」コマンド登録はC言語のインターフェース用の関数の Tcl_CreateCommand や Tcl_CreateObjCommand を用いて行う。拡張コマンドの実体となる「コマンド本体関数」を、決められた型と引数に従って先に定義しておき、そのコマンド関数アドレスと公開コマンド名を引数に与えて実行すれば登録される。 コマンド登録関数 int Hello_Init (Tcl_Interp *interp) { Tcl_CreateObjCommand (interp, "hello", Tcl_HelloCmd, NULL, NULL) ; return TCL_OK ; } コマンド本体関数 int Tcl_HelloCmd (ClientData dummy, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []) { ... return TCL_OK ; } コマンド本体関数は、Tcl パーサーからの引数を、引数の数(argc)と引数文字列配列(argv)で受け取る。ただし、引数を文字列で受け取るこの方式は Tcl_CreateCommand 関数で登録する場合であり、引数を Tcl オブジェクトで受け取りたい場合には、上例のように Tcl_CreateObjCommand 関数で登録する。
※この「コマンドの拡張」の解説は、「Tcl/Tk」の解説の一部です。
「コマンドの拡張」を含む「Tcl/Tk」の記事については、「Tcl/Tk」の概要を参照ください。
- コマンドの拡張のページへのリンク