我正在解决一个问题,非常感谢您的帮助。
假设我有一个 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_GetObjResult
、Tcl_GetString
)来检索错误消息。还有其他可能的返回代码,但您通常不会看到它们。
当然,成功时puts
的结果是空字符串;消息被打印出来,而不是返回。
如何获得解释器句柄?嗯,这实际上取决于您的代码如何与 Tcl 集成。如果您正在编写 Tcl 将加载
的共享库,那么它是初始化函数的唯一参数。另一方面,如果您嵌入 Tcl,那么您可能会在某个时刻调用 Tcl_CreateInterp()
,这会将句柄返回到新创建的解释器。您在做什么通常很明显。
关于c - 如何从 C 应用程序发送 tcl 命令到 tcl/tk 解释器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41801617/