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

标签 c tcl ipc tk-toolkit

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

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

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

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

最佳答案

在 C 级别,Tcl 解释器由 Tcl_Interp * 类型的句柄表示(应将其视为指向不透明结构)。按照惯例,使用 Tcl API 的人员将其命名为 interp,但这并不是非常重要。一旦你有了这样的句柄,你就可以使用:

int returnCode = Tcl_Eval(interp, "puts \"Hello World\"");

运行一些代码(反斜杠在那里是因为我们在 C 字符串常量中放入双引号)。如果执行成功完成,返回代码将等于 TCL_OK;如果出现问题,返回代码将等于 TCL_ERROR。在正常情况下,您可以使用 Tcl_GetObjResult(interp) 获取结果值(并且您可以使用 Tcl_GetString 来获取结果的字符串版本以进行打印)。在错误情况下,您可以使用相同的函数(即 Tcl_GetObjResultTcl_GetString)来检索错误消息。还有其他可能的返回代码,但您通常不会看到它们。

当然,成功时puts的结果是空字符串;消息被打印出来,而不是返回。

<小时/>

如何获得解释器句柄?嗯,这实际上取决于您的代码如何与 Tcl 集成。如果您正在编写 Tcl 将加载的共享库,那么它是初始化函数的唯一参数。另一方面,如果您嵌入 Tcl,那么您可能会在某个时刻调用 Tcl_CreateInterp(),这会将句柄返回到新创建的解释器。您在做什么通常很明显。

关于c - 如何从 C 应用程序发送 tcl 命令到 tcl/tk 解释器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41801617/

相关文章:

c - 如何根据从二进制文件读取的数据动态分配结构字段?

if-statement - 下面的 tcl 代码会做什么?

c - C中的流和管道有什么区别

c - 使用 volatile 限定符可以抑制编译器警告

当指向数组中的文件时,fread 中的核心转储

c - 是否可以想象,严格按照C11(或以上)标准的规定,这个程序可以优化为打印hello?

checkbox - 取消选择 ttk::checkbutton

regex - Tcl 正则表达式不返回所有匹配项

java - Zuul不转发请求到其他微服务

wcf - 双向进程间通信(通过命名管道)- WCF 或 .Net Remoting?