如何将C ++变量插入到TCL脚本程序中?

时间:2012-01-11 08:48:39

标签: c++ tcl ns2

在NS2中,有没有办法将C ++变量嵌入到TCL脚本中?例如,在TCL中,像这样设置路由协议,set opt(rt) XXX XXX可以是在C ++程序中定义的变量,例如

if(CONDITION==1) 

     XXX = "FLOODING";

if(CONDITION==2) 

         XXX = "AODV";

...

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用Tcl_LinkVar将C ++中的char *变量(不支持std :: string)耦合到Tcl。像这样,您所要做的就是更改C ++变量并调用Tcl_UpdateLinkedVar以允许Tcl注意到变量已更改。如果你从未在变量上设置任何跟踪,则不需要使用Tcl_UpdateLinkedVar,但它们实际上是一种非常常见的机制,因此建议进行调用。请注意Tcl_UpdateLinkedVar 对Tcl解释器的可重入调用;应该注意确保您运行的任何跟踪都不会触发回到代码中的循环......

// Setup (done once)...
Tcl_LinkVar(interp, "XXX", &XXX, TCL_LINK_STRING|TCL_LINK_READ_ONLY);


// Your code ...
if(CONDITION==1) 
     XXX = "FLOODING";
if(CONDITION==2) 
     XXX = "AODV";
// Notify Tcl ...
Tcl_UpdateLinkedVar(interp, "XXX");

如果要设置Tcl变量XXX来更改C ++变量XXX,则需要格外小心。停止使用TCL_LINK_READ_ONLY 确保,始终使用ckallocXXX 中的字符串分配内存(因为Tcl将使用匹配的ckfree在设置C ++变量时处理旧的。