分裂对象模型和TclCL(4)

上面过程还有一个疑问:如何在command函数中向解释器传递执行结果?

哈,这个用Tcl类可以解决。

Tcl类封装了Otcl解释器的实例,并提供了访问解释器的方法。这个类提供了以下的操作方法:

1、  获得Tcl实例的引用2、通过解释器调用Otcl过程3、从解释器获取结果,或将结果传回给解释器4、存取、查找TclObject5、获得到解释器的直接访问。

1、  获得Tcl实例的引用

ns一开始运行,Tcl类即被实例化。Tcl类的一个静态成员变量“Tcl Tcl::instance_“用来保存该实例。这个Tcl对象就是Otcl解释器对象,可以通过获得它的引用来访问Otcl解释器的功能。

 获得此实例引用的语句为:Tcl& tcl=Tcl::instance();

2、  通过解释器调用Otcl过程

通过Tcl实例调用Otcl的命令:tcl.eval(char* s) (有四种命令,只是参数不同,每个函数传一个字符串给解释器,然后解释器在全局上下文中将这个字符串当作Otcl命令来执行)

c++调用一个Otcl命令时,解释器将执行结保存在私有成员变量tcl_->result中。用户必须用tcl.resultvoid)来获取该执行结果。注意:结果是字符串

 想要扩展NSOtcl脚本:不仅把他放在_ns/tcl/目录下,还要加一条source命令在tcl/lib/ns-lib.tcl中,以便在用tcl-expand.tcl扩展ns-lib/tcl的时候将该脚本的内容包含进去,足后还需要重新编译NS重新生成ns_tcl.cc。具体的原理查看EmbeddedTcl类。

tips:看了这么多觉得还是有点模糊,下次的目标是添加一个简单的协议,让自己对整个流程更熟悉些。

你可能感兴趣的:(Tcl)