gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:39:41 26 4
gpt4 key购买 nike

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

我唯一一次看到这样的事情是一个 PyGTK+ GUI 和 C 代码的 python 绑定(bind)(我想就是这样;那是我的第一个学期合作,我不是很明白! ).这比我现在想讲的要多一些;有没有相对简单的方法来做到这一点?当我用谷歌搜索时,我找到了 SWIG ( http://www.swig.org/index.php );这是一个好方法吗?

最佳答案

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

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

  • 在 Tcl 中注册命令口译员
  • 在你的程序中嵌入一个 Tcl 解释器编程并使用 Tcl 作为嵌入式脚本语言(可能包括注册命令和回调到您的程序)
  • 使用全双工管道生成一个进程并通过stdin/stdout(你也可以附加一个管道的事件处理程序是数据可用时调用)
  • 较少的 Tcl 特定机制,例如fork/exec 或通过套接字连接。

Ousterhout 的书 Tcl and the TK Toolkit有点过时,但对 C API 有很好的指导。韦尔奇的 Practical Programming in Tcl/Tk是另一本经典的 Tcl/Tk 书籍,更新更频繁。还有several other books以及互联网上相当多的电子资源。一些好的起点是:Tcl tutorial , TK tutorial , Tcl advocacy site (可能值得仔细阅读以帮助您决定是否要走这条路),Tcl/Tk Wiki当然还有Stackoverflow .

TK 将为您提供一个简单的 GUI,并且非常容易学习编程 - 如果有点简单的话。它不像ugly as it used to be如果你花点时间tweak the appearance或使用主题引擎,例如 Tile.

作为诺曼·拉姆齐 points out (+1) ,另一种具有简单 C API 的替代方法是 Lua.两者都有优点和缺点。 Tcl 的主要优势是简单和干净集成的 TK 工具包以及来自第三方库的良好、成熟的支持(例如 Tix)。 Lua 的主要优点是语言更好,但没有标准的 GUI 工具包,因此 UI 没有很好地集成。 Lua 还为解释器中的线程提供了更好的支持,这是从头开始设计的。但是,如果您要包装遗留的 C/unix 应用程序,这不太可能是一个重要的特性。

WXWidgets 比 TK 复杂得多,承载更多的运行时包袱,但具有更丰富的功能集。

如果您确实有理由认为您的脚本项目会成长为一个更大的应用程序,您可能会考虑使用 Lua。然而,在更大的范围内,您将进入一个实质性的开发项目,并且 PythonRuby开始成为可行的选择。随着项目变得越来越大,包装 C 代码库将占整个项目的一小部分,而第三方库支持将成为一个更大的考虑因素。

如果您使用 Tcl 并发现您的项目获得了自己的生命,请考虑嵌入 Tcl 解释器并将应用程序重新转换为插件 API,人们可以将自己的脚本挂接到其中。额外的功能可以作为脚本完成,并可能交给第三方进行维护。具有内置脚本语言的系统的优点之一是您个人不一定非要实现功能。人们可以用脚本语言编写自己的扩展,或者让第三方为他们做。

SWIG 旨在为库生成包装器。它解析头文件并生成一个胶层,以目标语言呈现 native API。要使用它,您必须将您的程序重构到一个库中。

关于c - 如何将 GUI 改造为现有的 C 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/385156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com