你的问题是不完全清楚,但似乎你有两个文件,其中一个可以控制(并提供了一些Tcl的默认实现命令?),而另一个的是由用户控制的(这样他们可以覆盖的东西?)。然后你想把它们加载到Tcl解释器上下文中,以便你可以从C++调用东西?我会认为这是发生了什么事。
首先,从Tcl的角度来看,通过获取上下文(Tcl_Interp*
)到source
这个文件,使用默认实现。 (还有其他方法可以做到这一点,但这绝对是最简单的方法。)只有在完成之后,您才可以用source
这个文件加上用户定义,并且只有在已完成采购正确。所以这就是我们的目标。
从C++,要注意的主要事情是Tcl_EvalFile()
是source
Tcl中(就像Tcl_Eval()
是eval
等同)等同,而且你有照顾与检查错误; Tcl并没有将其异常系统映射到C++异常,因此检查那些返回码。
Tcl_Interp *interp = Tcl_CreateInterp();
if (Tcl_EvalFile(interp, "file2.tcl") != TCL_OK) {
const char *errorMessage = Tcl_GetString(Tcl_GetObjResult(interp));
// Deal with error
cerr << "Problem in library: " << errorMessage << "\n";
exit(1);
}
if (Tcl_EvalFile(interp, "file1.tcl") != TCL_OK) {
const char *errorMessage = Tcl_GetString(Tcl_GetObjResult(interp));
cerr << "Problem in user code: " << errorMessage << "\n";
exit(1);
}
// Everything ready
if (Tcl_Eval(interp, "[the_party get] start") != TCL_OK) {
// Something still went wrong...
如果您还没有这样做呢,我建议你请阅读[堆栈溢出的问题清单(http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist )。 –