如何从C应用程序向tcl/tk解释器发送tcl命令

如何从C应用程序向tcl/tk解释器发送tcl命令,c,tcl,ipc,tk,C,Tcl,Ipc,Tk,我正在努力解决一个问题,非常感谢您的帮助 假设我有一个tcl/tk应用程序和解释器“x.y.123.3454”,我想从C应用程序发送一些tcl过程,这些过程在“x.y.123.3454”中定义 例如,我想将puts Hello World从C应用程序发送到“x.y.123.3454”。怎么做 如果您想知道,为什么我不直接在tcl解释器中运行这些过程和命令,请告诉我。在C级别,tcl解释器由类型为tcl_Interp*的句柄表示,该句柄应被视为指向不透明结构。使用Tcl API的人通常将其命名为i

我正在努力解决一个问题,非常感谢您的帮助

假设我有一个tcl/tk应用程序和解释器“x.y.123.3454”,我想从C应用程序发送一些tcl过程,这些过程在“x.y.123.3454”中定义

例如,我想将puts Hello World从C应用程序发送到“x.y.123.3454”。怎么做


如果您想知道,为什么我不直接在tcl解释器中运行这些过程和命令,请告诉我。

在C级别,tcl解释器由类型为tcl_Interp*的句柄表示,该句柄应被视为指向不透明结构。使用Tcl API的人通常将其命名为interp,但这并不十分重要。一旦有了这样的手柄,您就可以使用:

int returnCode=Tcl_Evalinterp,puts\Hello World\; 要运行一些代码,反斜杠就在那里,因为我们在C字符串常量中加了双引号。如果执行成功完成,返回代码将等于TCL_OK,如果出现错误,返回代码将等于TCL_ERROR。在OK的情况下,使用Tcl_GetObjResultinterp获取结果值,并且可以使用Tcl_GetString获取结果的字符串版本以进行打印。在错误情况下,使用相同的函数,即Tcl_GetObjResult、Tcl_GetString来检索错误消息。可能还有其他返回代码,但您通常不会看到它们

当然,看跌期权的结果是成功的空字符串;消息已打印出来,未返回


你是怎么处理那个翻译的?这实际上取决于您的代码如何与Tcl集成。如果您正在编写Tcl将加载的共享库,那么它是初始化函数的唯一参数。另一方面,如果要嵌入Tcl,那么可能在某个时候调用Tcl_CreateInterp,这会将句柄返回给新创建的解释器。通常情况下,你正在做的事情是很明显的。

在这个问题上花了很多时间之后,我意识到要从C向已经存在的tcl/tk应用程序或解释器发送tcl命令并不容易

以下链接同意:

我知道这两种选择。在C语言中,它需要Tcl_CreateInterp,在Tcl语言中需要“load”。但我的问题略有不同,在我的例子中,您已经有了一个带有特定appname的tcl解释器,“x.y.123.3454”。现在,我如何调用tcl命令并将指令发送给这个特定的解释器呢?我非常希望您能让它正常工作。我非常需要你的建议。如果你的TCL和C进程可以被认为是独立的进程,那么任何标准的IPC机制都可以用来在两者之间传输信息。“C”进程中的内容是一个文本,在接收到执行TCL命令时,可以从TCL进程中“评估”该文本。您能详细说明一下吗?无论你提到什么都是需要的,但如何做到这一点是个问题。