我正在努力解决问题,并感谢您的帮助。
我们假设我有一个tcl / tk应用程序和解释器' x.y.123.3454'我想从C应用程序发送一些tcl过程,这些过程在' x.y.123.3454'中定义。
例如,我想将puts "Hello World"
从C应用程序发送到' x.y.123.3454'。怎么做?
如果您想知道,为什么我没有运行这些程序&直接在那个tcl解释器中命令,请告诉我。
答案 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_GetObjResult
,Tcl_GetString
)来检索错误消息。可能还有其他返回代码,但您通常不会看到它们。
当然,puts
的结果是成功时的空字符串;邮件已打印出来,未退回。
你如何获得解释器处理?嗯,这实际上取决于你的代码如何与Tcl集成。如果您正在编写Tcl将load
的共享库,那么它是您的初始化函数的唯一参数。另一方面,如果您正在嵌入Tcl,那么您可能在某个时刻调用Tcl_CreateInterp()
,这会将句柄返回给新创建的解释器。通常很明显你在做什么。
答案 1 :(得分:0)
在这个问题上花了很多时间后,我意识到没有简单的方法可以将Tcl命令从C发送到已经存在的tcl / tk应用程序或解释器。