tcl言語とC言語の連携
tcl言語でC言語の関数を使う
tcl言語はプラットフォームを問わず幅広く使われている言語です。今回は,
tcl言語は高水準のインタープリタなので,
ここではC言語で簡単な演算を行う関数を作成し,
tcl言語から呼び出すC言語関数
全ての引数の数と累積加算の戻り値を返すC言語側の関数は,
tcl言語から呼び出されるC言語で書かれた自作共有ライブラリ内での関数の戻り値は,
初期化関数名は以下となります。
int [任意の名称]_Init(Tcl_Interp *interp)
任意の名称は必ずしも共有ライブラリ名と一致させる必要はなく,
tcl言語から呼び出されるC言語の関数の仕様は,
リスト1
01: #include <tcl.h>
02:
03: int CalcCmd(ClientData clientdata, Tcl_Interp *interp, int argc, char **argv);
04:
05: int Calc_Init(Tcl_Interp *interp) {
06: Tcl_CreateCommand(interp, "calc", CalcCmd, (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
07: Tcl_PkgProvide(interp, "calc", "1.1");
08: return TCL_OK;
09: }
10:
11: int CalcCmd(ClientData clientdata, Tcl_Interp *interp, int argc, char **argv) {
12: int data, i, n, error;
13:
14: if(argc <= 2) {
15: interp->result = "Usage: calc num num ...";
16: return TCL_ERROR;
17: }
18: data = 0;
19: for(i = 1;i < argc;i++) {
20: error = Tcl_GetInt(interp, argv[i], &n);
21: if(error != TCL_OK) return error;
22: data += n;
23: }
24: sprintf(interp->result, "%d", data);
25: return TCL_OK;
26: }
tcl言語から呼び出されるC言語の関数を記述する場合は,
また,
自作共有ライブラリ内での初期化関数やtcl言語から呼び出されるC言語の関数とtcl言語インタープリタ処理系とのインターフェースは,
初期化関数においては,
tcl言語から呼び出されるC言語の関数の生成は,
tcl言語から呼び出されるC言語の関数の登録は,
tcl言語から呼び出されるC言語の関数であるCalcCmd関数
tcl言語から呼び出されるC言語の関数内で数値などの引数の実体を取得するには,
C言語での戻り値は TCL_