TCL windows dll函数作为参数接收并返回一个列表

问题描述 投票:0回答:1

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

Tcl_SetDoubleObj(resultptr, val);

例如。

在此先感谢您的帮助。

windows list dll tcl
1个回答
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_NewDoubleObj,或Tcl_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来操纵值的引用计数,但是对于这些简单的情况,您不需要它们。

© www.soinside.com 2019 - 2024. All rights reserved.