Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;没有框架的GUI P>所以,据我所知,没有一种方法可以有一个C++ GUI设计器,将你的应用程序作为一个独立的可执行程序来装运。所有第三方框架都以.dll-s等形式添加了它们的依赖项,可以是MFC、Qt、WTL、wxWidgets、GTK。这让我只有一个解决方案——自己使用Win32 API为当前应用程序设计GUI。我的假设是正确的还是遗漏了什么?我一直想知道uTorrent和其他一些人是如何做到这一点的。谢谢。_C++_User Interface_Frameworks - Fatal编程技术网

C++;没有框架的GUI P>所以,据我所知,没有一种方法可以有一个C++ GUI设计器,将你的应用程序作为一个独立的可执行程序来装运。所有第三方框架都以.dll-s等形式添加了它们的依赖项,可以是MFC、Qt、WTL、wxWidgets、GTK。这让我只有一个解决方案——自己使用Win32 API为当前应用程序设计GUI。我的假设是正确的还是遗漏了什么?我一直想知道uTorrent和其他一些人是如何做到这一点的。谢谢。

C++;没有框架的GUI P>所以,据我所知,没有一种方法可以有一个C++ GUI设计器,将你的应用程序作为一个独立的可执行程序来装运。所有第三方框架都以.dll-s等形式添加了它们的依赖项,可以是MFC、Qt、WTL、wxWidgets、GTK。这让我只有一个解决方案——自己使用Win32 API为当前应用程序设计GUI。我的假设是正确的还是遗漏了什么?我一直想知道uTorrent和其他一些人是如何做到这一点的。谢谢。,c++,user-interface,frameworks,C++,User Interface,Frameworks,一些框架允许您构建一个自给自足的“独立单体”EXE,而无需任何额外依赖项(除了操作系统提供的明显API)。 例如,在MFC中,您可以选择“静态”或“动态”MFC使用。第一个选项意味着所有需要的东西都将链接到您的EXE中。不,您可以静态链接大多数流行的GUI框架,包括MFC、Qt、ATL/WTL和wxWidgets。我不知道GTK,但我假设您也可以静态链接它 静态链接意味着不动态链接到DLL中的库代码,而是将该代码直接链接到可执行文件中,从而生成一个独立的EXE文件,无需任何外部依赖项即可发布 但

一些框架允许您构建一个自给自足的“独立单体”EXE,而无需任何额外依赖项(除了操作系统提供的明显API)。
例如,在MFC中,您可以选择“静态”或“动态”MFC使用。第一个选项意味着所有需要的东西都将链接到您的EXE中。

不,您可以静态链接大多数流行的GUI框架,包括MFC、Qt、ATL/WTL和wxWidgets。我不知道GTK,但我假设您也可以静态链接它

静态链接意味着不动态链接到DLL中的库代码,而是将该代码直接链接到可执行文件中,从而生成一个独立的EXE文件,无需任何外部依赖项即可发布


但当然,这些依赖项仍然存在,并且它们仍然会膨胀到可执行文件的大小,这可能是一个问题,这取决于您的部署机制。另外,对于接近金属的编程也有一些说法,因此直接使用Win32 API绝对是一种选择。这将产生绝对最小、最轻的应用程序,可能也是最快的。事实上,我相信这正是μTorrent所做的(或者至少,这是他们在几个版本之前所做的)。

根据应用程序的最低操作系统要求,您可以动态链接到包含在Windows最低目标版本中的MFC或ATL(对于WTL应用程序)版本

这种解决方案还有一个额外的优点——每当旧库的安全更新出现时,您不必为了从中获益而更新应用程序

但不管怎样,为纯Windows API编写代码并不是那么可怕,所以我建议您还是这样做

一个问题是,使用较新版本的VisualStudio编译的应用程序需要最新的CRT运行库,您必须在安装程序中提供,或者让用户自己安装。有办法克服这一点。我想就是我不久前偶然发现的那个。当然,您必须注意这一点,就像您根据旧的CRT库动态链接一样,最好也根据它的头进行编码。也许有一种方法可以完全摆脱CRT依赖性

编辑 在与科迪·格雷(Cody Gray)进行了激烈的讨论之后,我决定详细阐述一下,也许可以重申我的观点,并提出一些警告

即使是桌面软件也是一项服务,您必须在发布后为用户维护它。操作系统的版本会发生变化,它们的API和附带的库也会发生变化。苹果在“破坏”具有较新OS X和iOS版本的应用程序方面没有问题,开发人员明白他们必须让产品保持最新,否则他们将失去客户或忙于支持电话。在“大商业世界”中,微软等公司创造了一类程序员,他们将软件视为建筑物。你设计它,建造它,有人批准它,你就完成了,也许在支持它两年之后。这不是它应该是的

即使一个人编写了尽可能多的经得起未来考验的应用程序,也就是说,根据目标操作系统及其后可能出现的任何操作系统的完全定义、通用和文档化的行为,即使他们静态链接到所使用的所有库,他们也会使其成为自包含、正确且经过批准的旧程序,他们仍然必须在未来几年内积极维护它。它所依赖的库确实会发生变化。它们被升级、改进、bug被删除、漏洞被修复、依赖操作系统的行为被更新、删除、修复或推广

即使应用程序依赖于绝对最小的系统库集,上述所有内容也适用

因此,无论你的应用程序是否应该在有限的时间内使用,你都必须假设并计划如果与你的应用程序相关的任何变化,你必须维护它。即使它是一个纯Win32 API应用程序,您也必须检查它在较新版本的Windows中的行为,它是否提供用户界面元素或新操作系统用户期望从其应用程序中获得的服务

话虽如此,如果你不走纯Win32 API的路线,请注意你在使用我最初提到的任何黑客时所做的权衡


即使你的项目结果是一个一次性的应用程序。即使只是为了证明自己的未来。

谢谢您的回复。我相信你也同意MFC是一个令人痛苦的工作。所以没有其他选择了?谢谢,我对静态链接很熟悉(或多或少),不幸的是,在我的情况下,这不是一个选择,因为我当前的项目要求应用程序尽可能轻量级和快速。我想我会坚持使用Win32API。只是想确定没有更简单的选择。@astralmaster我不知道你说的那句话是什么意思。你想使用一个框架,但你觉得你不能,因为它太重了!静态链接不会使应用程序变慢。使用框架不会使应用程序变慢。大型可执行文件不会使应用程序变慢。你可以使用图形用户界面框架,而不需要大量的可执行文件。为什么对大小有这样的要求?您是否需要在一个硬盘上平均存储5亿次可执行文件?想象一下,通过使用适当的框架,您可以在节省的时间内实现哪些功能,并且只需要多一点hdd