接收作为参数并返回列表的TCL Windows DLL函数

时间:2018-09-04 21:15:34

标签: windows list dll tcl

我正在Windows中将dll编程为TCL的扩展名,我需要创建一个函数来接收列表作为参数并返回列表。 到目前为止,我正在处理简单的参数,并只返回一个值:

Tcl_SetDoubleObj(resultptr, val);

例如。

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

要解析列表,请使用Tcl_ListObjGetElements()。它将使您获得所有元素的数组,然后可以使用Tcl_GetIntFromObjTcl_GetDoubleFromObj之类的操作从元素中选择值(根据您的期望)。

int listc, i;
Tcl_Obj **listv;

if (Tcl_ListObjGetElements(interp, objv[1], &listc, &listv) != TCL_OK) {
    return TCL_ERROR;
}

for (i = 0; i < listc; i++) {
    int val;
    if (Tcl_GetIntFromObj(interp, listv[i], &val) != TCL_OK) {
        return TCL_ERROR;
    }
    printf("I've got a %d at index %d\n", val, i);
}

使用Tcl_NewListObjTcl_NewIntObj(或Tcl_NewDoubleObjTcl_NewStringObj或…)和Tcl_SetObjResult完成反向操作。

Tcl_Obj *elements[5];
int i;

for (i = 0; i < 5; i++) {
    elements[i] = Tcl_NewIntObj(i * i + 3);
}
Tcl_SetObjResult(interp, Tcl_NewListObj(5, elements));

在更复杂的情况下,您可能需要使用Tcl_IncrRefCountTcl_DecrRefCount来操纵值的引用计数,但是对于这些简单的情况,则不需要它们。