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

时间:2017-01-23 08:04:22

标签: 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解释器中命令,请告诉我。

2 个答案:

答案 0 :(得分:1)

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

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

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

当然,puts的结果是成功时的空字符串;邮件已打印出来,未退回。

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

答案 1 :(得分:0)

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

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