Самый простой способ - использовать 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 ++).