繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM