2013-04-03 81 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))'。我不記得前者是否已經遷移到後者的別名呢...... –