需要从c ++中的另一个文件调用tcl proc

时间:2014-01-24 06:37:16

标签: c++ tcl

我正在编写一个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

1 个答案:

答案 0 :(得分:1)

您的问题并不完全清楚,但似乎您有两个文件,其中一个是您控制的(哪些提供了某些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...
相关问题