0

如何使用 Tcl_ParseCommand 或“http://tmml.sourceforge.net/doc/tcl/”下已有的 Tcl C 程序列表。我是否需要为每个命令编写包装器 c 过程和初始化过程?

-普拉萨特

4

2 回答 2

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 回答
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's Wiki 上

请注意,Tcl_ParseCommand特别是,您最好使用 tclparser 包作为 schlenk 提到的。那是因为该函数的结果(作为输出参数)非常重要。它需要相当多的转换才能变成像 Tcl 值一样工作的东西。

于 2011-04-29T15:48:41.360 回答