[英]Need to call tcl proc from another file in c++
我正在编写一个c ++代码来评估tcl proc。 我有两个TCL文件。 两个文件中的任何一个都可以具有tcl proc说file1.tcl具有tcl proc mytest。 file2.tcl正在采购file1.tcl,因此,如果我在file2.tcl中执行[info procs mytest],我就能获得tcl proc名称mytest。 但是在C ++中,当我尝试评估proc时,它说无效命令mytest。 但是,如果我在file2.tcl中编写proc mytest,它将起作用。
file1.tcl是用户输入,而file2.tcl是默认输入。 仅在file1.tcl中缺少proc的情况下,我才会调用file2.tcl proc。 请提出我该如何工作。
谢谢Ruchi
您的问题尚不完全清楚,但似乎您有两个文件,一个文件由您控制(并且该文件提供某些Tcl命令的默认实现?),另一个文件由您的用户控制(以便它们可以覆盖内容) ?)。 然后,您想将它们加载到Tcl解释器上下文中,以便可以从C ++调用事物吗? 我认为这就是正在发生的事情。
首先,从Tcl的角度来看,你通过获取上下文(这样做Tcl_Interp*
)到source
使用默认的实现文件。 (还有其他的方法来做到这一点,但是这绝对是最简单的。)只有在做到这一点,你会source
与用户定义的文件,你只会做呼叫踢东西了, 一切都在正确地完成采购后。 这就是我们的目标。
从C ++开始,主要要注意的是Tcl_EvalFile()
与Tcl中的source
等效(就像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...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.