我有以下代码
int redirect_test(ClientData pClientData, Tcl_Interp *pInterp, int argc, char *argv[])
{
std::string result_str = "This is the output from the method";
Tcl_SetObjResult(pInterp, Tcl_NewStringObj(result_str.c_str(), -1));
return true;
}
但是,当我尝试以下列方式使用此方法时
% set m [ redirect_test]
This is the output from the method
% puts $m
can't read "m": no such variable
如何从TCL函数返回值?
答案 0 :(得分:2)
问题是你的:
return true;
Tcl命令实现通过返回C常量TCL_OK
(= 0)并用TCL_ERROR
(= 1)指示错误来指示成功。 (还有其他其他定义的结果代码,但如果您不确定它们的含义,建议您不要使用它们。)true
被C ++ 1
转换为bool
→int
强制转换运算符,TCL_ERROR
,使命令失败(结果字符串就是错误消息)。
修复很简单。请改用:
return TCL_OK;