如何将GUI改造为现有的C程序?

如何将GUI改造为现有的C程序?,c,user-interface,tcl,C,User Interface,Tcl,我一直在做一个项目,移植一个旧的solaris CL程序在Linux上运行,除非出现一些不相关的硬件问题,否则就完成了。现在我想要一个GUI,这样用户可以通过下拉菜单和复选框在各种选项中进行选择,还可以在一些文本输入区域中选择不受限制的选项,如文件名。(该程序是一个内部工具,用于运行一些光谱扫描仪并将结果存储为CSV文件。它处理所有这些选项,运行扫描仪并处理信息,并使用指定的文件名存储信息;我只想使用比CL更好的工具。) 我唯一一次看到这样的东西是一个PyGTK+GUI,带有C代码的python

我一直在做一个项目,移植一个旧的solaris CL程序在Linux上运行,除非出现一些不相关的硬件问题,否则就完成了。现在我想要一个GUI,这样用户可以通过下拉菜单和复选框在各种选项中进行选择,还可以在一些文本输入区域中选择不受限制的选项,如文件名。(该程序是一个内部工具,用于运行一些光谱扫描仪并将结果存储为CSV文件。它处理所有这些选项,运行扫描仪并处理信息,并使用指定的文件名存储信息;我只想使用比CL更好的工具。)


我唯一一次看到这样的东西是一个PyGTK+GUI,带有C代码的python绑定(我想就是这样;那是我第一个学期的合作,我不太懂!)。这比我现在想了解的要多一些;有没有一种相对简单的方法可以做到这一点?当我在谷歌上搜索时,我发现了SWIG();这是一个好方法吗?

既然您已经熟悉PyGTK,为什么不使用它呢?毕竟,PyGTK只是Gtk+的绑定,Gtk+是用C编写的


它也是跨平台的。因此,如果您使用您的应用程序,它几乎可以在任何地方运行。

我以前使用过tcl/tk包装较小的CLI程序,而且它通常一开始就可以正常工作

tcl/tk是一种脚本语言/软件包,它将调用和解析CLI输出,因此您不必编写新程序


听起来这项工作正是为之而设计的。它有一个非常简单的C API,允许您使用回调注册命令。如果在Tcl程序中使用该命令,它将调用回调,并提供一种机制来在Tcl列表(本机数据结构)和ARGV样式的char*数组之间转换参数

它是专门设计的,以便将这种包装器改造成命令行驱动的C程序。您还可以使用多种其他模式来连接解释器,并且它很容易作为脚本语言嵌入到程序中。内存中可用的接口机制包括:

  • 在Tcl中注册命令 翻译
  • 将Tcl解释器嵌入到 编程并使用Tcl作为嵌入式 脚本语言(可能包括注册命令和回调到 计划)
  • 使用全双工管道生成进程,并通过 标准输入/标准输出(您也可以附加 将事件处理程序添加到 数据可用时调用)
  • 较少的Tcl特定机制,例如 fork/exec或通过套接字连接
Ousterhout的书有点过时,但是有一个很好的C API指南。韦尔奇的是另一本经典的Tcl/Tk书籍,更新更频繁。互联网上也有相当多的电子资源。一些好的起点是:,(可能值得一读,以帮助您决定是否要走这条路),当然还有

TK将为您提供一个简单的GUI,并且非常容易学习编程——如果有点简单的话。这并不是说你需要花一些时间来创建或使用主题引擎,比如

正如诺曼·拉姆齐(Norman Ramsey)所说,另一种使用简单C API的方法是既有优点也有缺点。Tcl的主要优势是简单、干净集成的TK工具包和来自第三方库(例如)的良好、成熟的支持。Lua的主要优点是语言更好,但是没有标准的GUI工具包,因此UI没有很好地集成。Lua还对解释器中的线程提供了更好的支持,它从一开始就是为此而设计的。但是,如果要包装旧的C/unix应用程序,这不太可能是一个重要的功能

WXWidgets比TK复杂得多,运行时负担更重,但功能集更丰富

如果你有真正的理由认为你的脚本项目将成长为一个更大的应用程序,你可能会考虑Lua。然而,在更大的范围内,你将进入一个实质性的开发项目,或者开始成为可行的选择。随着项目变得越来越大,C代码库在整个项目中所占的比例将越来越小,第三方库支持将是一个更大的考虑因素

如果你与TCL一起发现你的项目有自己的生命,考虑嵌入TCL解释器并将应用程序重新编译为插件API,人们可以将自己的脚本绑定到其中。额外的功能可以作为脚本来完成,并且可能会欺骗第三方进行维护。使用内置脚本语言的系统的优点之一是,您个人不必实现功能。人们可以用脚本语言编写自己的扩展,也可以让第三方为他们编写扩展


SWIG被设计为围绕库生成包装器。它解析头文件并生成用目标语言表示本机API的粘合层。要使用它,您必须将程序重新分解到库中

Tcl/Tk怎么样。。丰富的资源。。例如

任何工具包或框架都可以解决您的问题,因为您请求的UI充当命令行可执行文件的包装器。您可以选择C#、MFC、VB6或任何您想要的工具。基于.NET的语言(如C#)对于命令行UI包装器来说非常容易。如果你想在C++中做,WxWistGes、Qt或Engest+++可以帮助你。

如果你知道如何在C中编程,你可以在Win32 API中完成它,但是你必须管理一些在C++框架中自动处理的东西。p> < MGui >(Myro图形用户界面)是一个跨平台的图形用户界面,它是在ANSI C中编写的,也通过一个框架库提供了一个C++ API。它由一个库组成,包括所有典型的GUI对象,如菜单、按钮、可编辑字段、列表等。。。还有鳕鱼