SetVar の最後の引数はフラグで種々のものがあるようですが,ひとまず.TCL_GLOBAL_ONLY にしててもいいみたいです??でも関数中から呼ばれたときとかには問題ですね.
値の取得には Tcl_GetVar() などを使います.
See. Tcl_SetVar(3)
#include <tcl.h> /* * gcc -fPIC -I/usr/local/include -c foo.c * ld -Bshareable -x foo.o -o libfoo.so -L/usr/local/lib -ltcl80jp -lm */ int foo(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { Tcl_SetVar(interp, "foo", "12349", TCL_GLOBAL_ONLY); Tcl_SetVar2(interp, "bar", "test", "5678", TCL_GLOBAL_ONLY); return TCL_OK; } int Foo_Init(Tcl_Interp* interp) { Tcl_CreateCommand(interp, "foo", foo, NULL, NULL); return TCL_OK; } |
下記の例では i を 0 から 99 まで変化させ,i*i の値をリストにして返します.
int foo(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { Tcl_DString dstr; char str[512]; int i; Tcl_DStringInit(&dstr); for (i=0; i<100; i++) { sprintf(str, "%d ", i*i); Tcl_DStringAppend(&dstr, str, -1); } Tcl_DStringResult(interp, &dstr); Tcl_DStringFree(&dstr); return TCL_OK; } |