【问题标题】:Differences between visual component library(vcl) and WinApi可视化组件库(vcl)和WinApi的区别
【发布时间】:2023-03-14 09:02:01
【问题描述】:

在Delphi中使用vcl组件和WinApi函数创建gui应用程序有什么区别吗?

【问题讨论】:

  • 你显然从未尝试过这两种方法。
  • 当然。我不知道winapi。每天我都看到专业程序员使用winapi。这就是为什么我问我是否必须学习它。 (但我知道 Vcl)
  • 如果您使用的是 VCL,那么您已经在使用 WinAPI。 VCL 只是 VCL 之上的一个层,它使使用它变得更加容易。但恕我直言,了解 VCL 的内部结构绝对是值得的。在这样做的过程中,您实际上会掌握 WinAPI 知识“en-passant”。

标签: delphi user-interface winapi


【解决方案1】:

@Azad 我认为有两个很大的区别:首先是 VCL 的易用性,它使您能够在窗体(窗口)上拖放控件、更改其属性并分配事件,从而为您提供高生产力图形用户界面的开发。

另一个很大的区别是最终应用程序的大小,如果您只使用 WINAPI 调用创建应用程序,您的最终应用程序将比使用 VCL 小。

我建议您查看项目KOL(KOL - Key Objects Library 是一组对象,用于使用 Delphi 但没有 VCL(或 Free Pascal)开发强大(但很小)的 32 位 Windows GUI 应用程序。它是免费分发的收费,附源代码。)。


(来源:kolmck.net

【讨论】:

    【解决方案2】:

    几乎所有真实世界的 Delphi 应用程序都使用 VCL,并且偶尔也会直接调用 Win32 API。无论如何,VCL 框架最终都会调用 Win32 调用。因此,您几乎总是会同时使用两者。

    提到 KOL 的人是在建议另一个“中间”层,因为直接走是非常痛苦的。

    Microsoft 拥有(按历史顺序)、用于 C++ 的 MFC 和 ATL,以及用于 C#/VB.net 语言的 .NET,作为位于应用程序和原始 Win32 API 之间的“框架”层,用于他们的 MS Visual工作室产品。

    编写比 Notepad.exe 更复杂的东西直接进入“金属”(Win32 API 原始)的人很少。所以,这更难,需要更长的时间来学习,做所有的事情。最后,它并没有明显更快或更好。如果你真的需要变小(比如你正在编写病毒),也许你可能想要使用 Win32 本机。

    【讨论】:

    • “极度痛苦”+1 轻描淡写的一周 :-)
    【解决方案3】:

    VCL 是一个完整的框架,封装了 Windows API,使开发人员免受血腥细节的影响,使开发 Delphi 应用程序变得更加容易。
    与 Windows 版本更改相比,您在生产力和兼容性方面获得了巨大的进步...

    【讨论】:

    • +1。这一点,再加上 RRUZ 提到的视觉表单设计器,是主要的区别。 VCL 是 WinAPI 的包装器,使其更易于使用。
    【解决方案4】:

    嗯,当然,VCL 需要 Borland 编译器。 Win32 API 适用于任何语言。使用 GUI 类库(如 VCL)的目的是使创建支持 GUI 的程序的工作更容易。这样做只使用 Win32 是相当惩罚的。

    【讨论】:

    • 嗯,总会有 Freepascal/lazarus。
    【解决方案5】:

    时间,时间,然后更多时间。

    【讨论】:

    • 你的意思是 WinApi 更快吗?
    • 我相信他的意思是说,VCL 的学习和使用比使用 WinApi “手动”完成所有事情要快得多。
    • 梅森怎么说。并且主要用于使用。
    【解决方案6】:

    你使用 WinAPI 做 VCL 不能做的事情。

    【讨论】:

    • 这是 Visual Basic 人群习惯的一种方法。您需要一些内置组件和辅助函数在 Visual Basic 中无法完成的有趣事情,您可以调用 WinAPI 调用。当然,在 Delphi 中,最常见的 Win32 API 调用很容易。如果您的 Uses 子句中还没有“Windows”,只需添加它,然后从 Windows 调用任何函数。对于其他 API,您需要一个 API 库,例如 JEDI Windows API 库,以帮助处理 ACL(访问控制列表)或其他内容。
    • 放一点抽象可能对未来的移植有所帮助。
    猜你喜欢
    • 2011-05-23
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 2011-11-25
    • 2015-09-23
    • 2017-03-26
    • 2021-12-14
    相关资源
    最近更新 更多