2013-04-03 46 views
0

我有Tcl_Interp的结构,我不知道它是什么。我试图打印一个字符串值interp.result,但它没有返回任何东西。我使用这个功能:如何获取Tcl_Interp的字符串值

void debug_state(char *state); 

这样的:

debug_state(Tcl_GetStringResult(g_game.tcl_interp)); 

但它不返回任何东西。是否有其他方式可以看到除char *Tcl_GetStringResult(interp)以外的其他字符串值tcl_interp

回答

1

您不应该将Tcl_Interp *用作除解释器的不透明句柄以外的其他任何东西。曾几何时,您使用interp-> result来访问结果,但这已被弃用了十多年。正如你所发现的,Tcl_GetStringResult通常更好,应该使用Tcl_GetObjResult。一般来说,在新代码中,您应该尝试使用Tcl_Obj函数而不是字符串函数,因为这可以避免在不必要时转换字符串类型和从字符串类型转换。

你的代码应该没问题,前提是debug_state不希望函数返回后结果值有效。我会说如果你看到一个空字符串,那么这就是你的解释器结果。您可以通过将其设置为例如:Tcl_SetObjResult(interp, Tcl_NewStringObj("testing, testing...", -1));之前的内容来检查。如果你再调用Tcl_GetStringResult(interp),你应该得到一个char *指针指向上面字符串的一个副本。

+1

'Tcl_GetStringResult(interp)'的替代方法是'Tcl_GetString(Tcl_GetObjResult(interp))'。我不记得前者是否已经迁移到后者的别名呢...... –