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



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

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

例如,我想将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。在OK的情况下,您可以使用Tcl_GetObjResult(interp)获得结果值(您可以在上面使用Tcl_GetString来获得要打印的结果的字符串版本)。在出现错误的情况下,您可以使用相同的函数(即Tcl_GetObjResultTcl_GetString)来检索错误消息。还有其他可能的返回代码,但您通常不会看到它们。

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


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

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

以下链接一致:http://cpptk.sourceforge.net/doc.html

最新更新