0

Tcl_ParseCommandの使用方法、または「http://tmml.sourceforge.net/doc/tcl/」ですでに利用可能なTclCプロシージャのリスト。これらのコマンドごとにラッパーcプロシージャとinitプロシージャを作成する必要がありますか?

-プラサート

4

2 に答える 2

0

はい、それらを使用するには、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 値として機能するようなものに変換するには、かなり多くの変換が必要です。

于 2011-04-29T15:48:41.360 に答える
0

パーサー コマンド Tcl_ParseCommand などにアクセスする最も簡単な方法は、tclparser 拡張 (たとえば、Debian/Ubuntu の (孤立した) tclparser パッケージ、またはソースhttp://wiki.tcl.tk/1660から自分でビルドする) です。

他の Tcl C ライブラリ コマンドも処理する必要がある場合は、一般的な Tcl 拡張の記述方法を確認する必要があります。そのための多くの例とアドバイスがhttp://wiki.tcl.tk/1191にあります。

于 2011-04-28T06:33:40.097 に答える