У вас есть доступ к дескриптору Tcl_Interp*
, используемому в C ++ / Tk? Если это так (и при условии, что вы получили его в переменной с именем interp
), используйте:
int resultCode = Tcl_Eval(interp, str);
Далее, проверьте resultCode
, чтобы увидеть, является ли оно TCL_OK
или TCL_ERROR
(возможны другие значения, но редко встречаются в обычных сценариях). Это говорит вам о толковании «результата», который вы получаете так:
const char *result = Tcl_GetString(Tcl_GetObjResult(interp));
Если код результата говорит об ошибке, result
теперь является сообщением об ошибке. Если все в порядке, result
- это вывод сценария (примечание: не то, что было написано в стандартном виде). Вам решать, что с этим делать.
[РЕДАКТИРОВАТЬ]: Я посмотрел это более подробно. Это противнее, чем кажется, потому что C ++ / Tk скрывает Tcl довольно глубоко внутри себя. Насколько я вижу, вы делаете это (не проверено!):
#include "cpptk.h" // might need "base/cpptkbase.h" instead
#include <string>
// This next part is in a function or method...
std::string script("the script to evaluate goes here");
std::string result = Tk::details::Expr(script,true);