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

How to send a tcl command to a tcl/tk interpreter from a C application

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

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

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

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

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

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

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

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


你是怎么得到那个解释器句柄的?好吧,这实际上取决于您的代码如何与 Tcl 集成。如果您正在编写 Tcl 将 load 共享的库,它是您的初始化函数的唯一参数。另一方面,如果您要嵌入 Tcl,那么您可能会在某个时候调用 Tcl_CreateInterp(),return 是 newly-created 解释器的句柄。你在做什么通常很明显。

在这个问题上花了很多时间后,我意识到没有简单的方法可以将 tcl 命令从 C 发送到已经存在的 tcl/tk 应用程序或解释器。

以下 link 同意: http://cpptk.sourceforge.net/doc.html