在c程序中包括tk.h和tcl.h

时间:2010-06-09 06:08:33

标签: c linux tcl

我正在开发一个ubuntu系统。我的目标是使用TCL / TK中的GUI工具基本上用C语言创建IDE。我安装了tcl 8.4,tk8.4,tcl8.4-dev,tk8.4-dev并在我的系统中安装了tk.h和tcl.h头文件。但是,当我运行一个基本的hello world程序时,它显示出很多错误。

#include "tk.h"
#include "stdio.h"
void hello() {
     puts("Hello C++/Tk!");
}
int main(int, char *argv[])
{     init(argv[0]);
     button(".b") -text("Say Hello") -command(hello);
     pack(".b") -padx(20) -pady(6);
}

有些错误是

tkDecls.h:644: error: expected declaration specifiers before ‘EXTERN’

/usr/include/libio.h:488: error: expected ‘)’ before ‘*’ token

In file included from tk.h:1559,
                 from new1.c:1:
tkDecls.h:1196: error: storage class specified for parameter ‘TkStubs’
tkDecls.h:1201: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token

/usr/include/stdio.h:145: error: storage class specified for parameter ‘stdin’

tk.h:1273: error: declaration for parameter ‘Tk_PhotoHandle’ but no such parameter

任何人都可以告诉我如何纠正这些错误?请帮忙......

2 个答案:

答案 0 :(得分:4)

这根本不是一个有效的程序。您尝试做的是将Tcl和Tk嵌入到您的C应用程序中。阅读Tcl / Tk书中的相关章节或研究Tcl Wiki(例如1)。

要运行Tcl或Tk命令,您必须正确初始化Tcl_Interp。所以至少你必须初始化Tcl库并创建一个解释器。然后对于Tk,您将需要初始化该库并运行事件循环。 Tcl_AppInit的文档对此进行了讨论,Tcl源代码中的tclAppInit.c文件(或Tk中的tkAppInit.c)向您展示了如何设置应用。通常,您将使用提供的tkAppInit文件作为“main”,并将自定义应用程序初始化放入从Tcl或Tk主函数调用的Tcl_AppInit函数中。

不建议从C调用Tk函数。定义脚本并在Tcl中写入Tk位。甚至Tk本身也会创建标准对话框,例如使用Tcl脚本(来自library/*.tcl)。

答案 1 :(得分:0)

但是......你不应该使用<>进行系统范围的包含吗?!并且button("..") -text("...") ..不是很好的C语法,除非tk.h提供强大的宏button-text(这是有问题的,即不可能),我怀疑它不是这样(事实上并非如此)......

你可能对this感兴趣,而且对this的阅读和挖掘是值得的;并且(也许对你更有趣),阅读,例如this