0

NS2 で、C++ 変数を TCL スクリプトに埋め込む方法はありますか? たとえば、TCL では、このようにルーティング プロトコルを設定すると、次のようなset opt(rt) XXX XXXC++ プログラムで定義された変数になる可能性があります。

if(CONDITION==1) 

     XXX = "FLOODING";

if(CONDITION==2) 

         XXX = "AODV";

...
4

1 に答える 1

0

最も簡単な方法はTcl_LinkVar、C++ の char* 変数 (std::string はサポートされていません) を Tcl に結合するために使用することです。このように、C++ 変数をTcl_UpdateLinkedVar変更し、変数が変更されたことを Tcl が認識できるように呼び出すだけです。変数にトレースを設定していない場合は使用する必要はありませんがTcl_UpdateLinkedVar、実際には非常に一般的なメカニズムであるため、呼び出しを行うことをお勧めします。は Tcl インタープリターへの再入呼び出しであるTcl_UpdateLinkedVar ことに注意してください。実行するトレースがコードへのループバックをトリガーしないように注意する必要があります…</p>

// 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 変数の設定でXXXC++ 変数を変更する場合は、特にXXX注意が必要です。TCL_LINK_READ_ONLY の使用をやめ、文字列のメモリ割り当てに常に使用するようにします(ckallocXXX Tcl はckfree、C++ 変数を設定するときに古いものを破棄するために一致したものを使用するため)。

于 2012-01-11T15:41:13.993 に答える