Tcl_ParseCommandの使用方法、または「http://tmml.sourceforge.net/doc/tcl/」ですでに利用可能なTclCプロシージャのリスト。これらのコマンドごとにラッパーcプロシージャとinitプロシージャを作成する必要がありますか?
-プラサート
Tcl_ParseCommandの使用方法、または「http://tmml.sourceforge.net/doc/tcl/」ですでに利用可能なTclCプロシージャのリスト。これらのコマンドごとにラッパーcプロシージャとinitプロシージャを作成する必要がありますか?
-プラサート
はい、それらを使用するには、C で実装されたラッパー コマンドを記述する必要があります。ただし、それを簡単にするための優れたツールがいくつかあります。特に、critclは興味深い選択であり、次のように使用できます (非常に奇妙な例):
package require critcl
critcl::cproc foo {Tcl_Interp* interp Tcl_Obj* argObj} ok {
int nObjs;
Tcl_Obj **objs;
if (Tcl_ListObjGetElements(interp, argObj, &nObjs, &objs) != TCL_OK)
return TCL_ERROR;
if (nObjs != 2) {
Tcl_AppendResult(interp, "need list of length 2", NULL);
return TCL_ERROR;
}
Tcl_SetObjResult(interp, Tcl_NewBooleanObj(
!strcmp(Tcl_GetString(objs[0]), Tcl_GetString(objs[1]))));
return TCL_OK;
}
puts [foo {a a}]
役立つドキュメントは、Tcler の Wiki にあります。
Tcl_ParseCommand
特に、シュレンクが言及しているように tclparser パッケージを使用する方が良いことに注意してください。これは、その関数の結果 (out パラメーターとして) が非常に重要であるためです。Tcl 値として機能するようなものに変換するには、かなり多くの変換が必要です。
パーサー コマンド Tcl_ParseCommand などにアクセスする最も簡単な方法は、tclparser 拡張 (たとえば、Debian/Ubuntu の (孤立した) tclparser パッケージ、またはソースhttp://wiki.tcl.tk/1660から自分でビルドする) です。
他の Tcl C ライブラリ コマンドも処理する必要がある場合は、一般的な Tcl 拡張の記述方法を確認する必要があります。そのための多くの例とアドバイスがhttp://wiki.tcl.tk/1191にあります。