通过Tcl实例,一共有四种不同的方法来调用一个OTcl命令。他们在调用参数方面有本质的区别。每个函数都传递一个字符串(string)给解释器,然后解释器通过一个全局文本来识别这个字符串。如果解释器返回TCL_OK,则这些函数将会返回一个相应的OTcl过程。反过来,如果解释器返回TCL_ERROR,则这些函数将调用tkerror{}。用户可以重载(overload)这个过程,以便有选择地忽略某些类型的错误。
●tcl.eval(char* s)调用Tcl_GlobalEval(),通过解释器执行s。
●tcl.evalc(const char* s)保存字符串参数s。它将字符串s复制到中间缓冲区;然后再在中间缓冲区里面调用之前的
eval(char* s)。
●tcl.eval()假设命令已经存储在internal bp_类中;它直接调用tcl.eval(char* bp_)。缓冲区自己的指针可以通过
tcl.buffer(void)方法获得。
●tcl.evalf(const char* s, . . . )类似于一个Printf(3)。它在内部使用vsprintf(3)来创建输入的字符串。
作为一个例子,这里有一些使用上面所讲函数的使用方法:
Tcl& tcl = Tcl::instance();
char wrk[128];
strcpy(wrk, "Simulator setNumberInterfaces_ 1");
tcl.eval(wrk);
sprintf(tcl.buffer(), "Agent/SRM setrequestFunction_ %s", "Fixed");
tcl.eval();
tcl.evalc("puts stdout hello world");
tcl.evalf("%s request %d %d", name_,sender, msgid);