Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要从c+;中的另一个文件调用tcl proc+; 我正在编写一个C++代码给EVAL一个TCL PROC。我有两个TCL文件。任何两个都可以拥有tcl进程 假设file1.tcl有tcl proc mytest。 file2.tcl正在寻找file1.tcl,因此如果我在file2.tcl中执行[info procs mytest],我就能够获得tcl proc name mytest。 但是在C++中,当我尝试使用EPROC时,它会说无效的命令MyTest. 但是,如果我在file2.tcl中编写proc mytest,它就会工作_C++_Tcl - Fatal编程技术网

需要从c+;中的另一个文件调用tcl proc+; 我正在编写一个C++代码给EVAL一个TCL PROC。我有两个TCL文件。任何两个都可以拥有tcl进程 假设file1.tcl有tcl proc mytest。 file2.tcl正在寻找file1.tcl,因此如果我在file2.tcl中执行[info procs mytest],我就能够获得tcl proc name mytest。 但是在C++中,当我尝试使用EPROC时,它会说无效的命令MyTest. 但是,如果我在file2.tcl中编写proc mytest,它就会工作

需要从c+;中的另一个文件调用tcl proc+; 我正在编写一个C++代码给EVAL一个TCL PROC。我有两个TCL文件。任何两个都可以拥有tcl进程 假设file1.tcl有tcl proc mytest。 file2.tcl正在寻找file1.tcl,因此如果我在file2.tcl中执行[info procs mytest],我就能够获得tcl proc name mytest。 但是在C++中,当我尝试使用EPROC时,它会说无效的命令MyTest. 但是,如果我在file2.tcl中编写proc mytest,它就会工作,c++,tcl,C++,Tcl,file1.tcl是用户输入,file2.tcl是默认输入。只有当file1.tcl中缺少proc时,我才会调用file2.tcl proc。 请建议我如何让它工作 谢谢 Ruchi您的问题并不完全清楚,但似乎您有两个文件,一个是您控制的(并且提供一些Tcl命令的默认实现?),另一个是由您的用户控制的(因此他们可以覆盖东西?)。然后,您想将这些加载到TCL解释器上下文中,以便从C++调用东西?我想这就是发生的事情 首先,从Tcl的角度来看,您可以通过将上下文(Tcl_Interp*)获取到带有默

file1.tcl是用户输入,file2.tcl是默认输入。只有当file1.tcl中缺少proc时,我才会调用file2.tcl proc。 请建议我如何让它工作

谢谢
Ruchi

您的问题并不完全清楚,但似乎您有两个文件,一个是您控制的(并且提供一些Tcl命令的默认实现?),另一个是由您的用户控制的(因此他们可以覆盖东西?)。然后,您想将这些加载到TCL解释器上下文中,以便从C++调用东西?我想这就是发生的事情

首先,从Tcl的角度来看,您可以通过将上下文(Tcl_Interp*)获取到带有默认实现的文件的
源代码。(还有其他方法,但这绝对是最简单的。)只有这样做之后,您才能
源代码
包含用户定义的文件,并且只有在所有内容都正确完成源代码后,您才能进行调用以启动工作。这就是我们的目标

<>从C++中,主要的注意事项是: TCLYEVALILFILE()/<代码>在TCL中等价于<代码>源代码>代码(正如<代码> TCLYVALL()>代码>等效于<代码> EVA/COD> >,并且您必须注意检查错误;TCL没有将异常系统映射到C++异常,所以<强>检查那些返回代码<强> > /p>
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...
Tcl_Interp*Interp=Tcl_CreateInterp();
if(Tcl_EvalFile(interp,“file2.Tcl”)!=Tcl_OK){
const char*errorMessage=Tcl_GetString(Tcl_GetObjResult(interp));
//处理错误

cerr如果您还没有这样做,我建议您阅读。