你的問題是不完全清楚,但似乎你有兩個文件,其中一個可以控制(並提供了一些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 )。 –