私はTcl_CreateObjCommandを使って登録したcコードで書かれた新しいtclコマンドを実装し、このcコードの中でTcl_Evalを呼び出して連想配列を作成し、それを変数tmpに格納するコードを含む文字列を評価します。 Tcl_eval()で作成されたこのtmp変数を、C関数の戻り結果オブジェクトとして設定するにはどうすればよいですか?tclライブラリ:tcl_eval()を使用してcコードのtclコマンド拡張の戻り結果を設定する方法は?
例:ところで上記の作品に
TCL> set x [MyCommand]
TCL> puts "$x(key1)"
value1 # Currently an Error and not set
TCL> puts "$x(key2)"
value2 # Currently and Error and not set
:私は上記のC-拡張子を持つTclインタープリタを実行すると
int MyCommand(
ClientData clientData,
Tcl_Interp* interp,
int argc,
char* argv[])
{
int rc = Tcl_Eval(interp,
"array set tmp [list {key1} {value1} {key2} {value2}]");
if (rc != TCL_OK) {
return rc;
}
//???
Tcl_SetObjResult(interp, ?? tmp variable from eval??);
return TCL_OK;
}
が、私はこの結果を見ることを期待します。ちょうど私がそれをしたい方法ではありません。私が入力した場合たとえば、:
TCL> set x [MyCommand]
TCL> puts "$tmp(key1)"
value1 # Its Works! Except, I didn't want to set a global variable tmp
TCL> puts "$tmp(key2)"
value2 # Its Works! Except, I didn't want to set a global variable tmp
(代わりにTMPを設定するには、たぶん、そのA「機能」??)とにかく、私はまだそれをprocの「リターン」のメカニズムを使用して値を返すことによって、正しい方法を仕事をしたいです。
「Tclライブラリ」のドキュメントでは、tcl_evalの場合、他のコマンドを評価するためにネストされた呼び出しを行うことができますので、cclient-extensionのTcl_Eval()を呼び出すことは正当です。私はちょうどTcl_Evalからのオブジェクト結果をc-拡張手順のオブジェクトを "返す"にコピーする方法を知らない。