Как вставить переменную C ++ в программу сценария TCL? - PullRequest
0 голосов
/ 11 января 2012

В NS2, есть ли способ встроить переменную C ++ в сценарий TCL? Например, в TCL установите протокол маршрутизации следующим образом: set opt(rt) XXX XXX может быть переменной, определенной в программе на C ++, например

if(CONDITION==1) 

     XXX = "FLOODING";

if(CONDITION==2) 

         XXX = "AODV";

...

1 Ответ

0 голосов
/ 11 января 2012

Самый простой способ - использовать Tcl_LinkVar для соединения переменной char * в C ++ (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 и , гарантируя , что вы всегда используете ckalloc для выделения памяти для строк в XXX (поскольку Tcl будет использовать совпадающие ckfree для удаления старый при установке переменной C ++).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...