Windows中的资源文件如何工作以及为什么使用它们?

时间:2017-09-04 13:14:25

标签: windows resource-files

我对使用资源文件的每本教程/书籍感到沮丧,但从未解释他们使用它们的原因或它们如何在幕后工作。我无法在此找到任何信息。我希望有人可以为每个人创建公开的答案,以便稍后找到。

一些相关信息可能包括......

  1. 资源文件背后的理由是什么?

  2. 它们是功能还是Windows或语言编译器?

  3. 为什么不应该仅通过代码创建GUI?

  4. 是否存在只能使用资源文件或只能使用代码的情况?

  5. 资源文件条目如何在运行时转换为实际窗口的对象?

  6. 资源编译器对这些条目做了什么以及编译后的格式包含哪些内容?

  7. 使用资源文件而非代码创建的加载时间是否有差异?

  8. 您对使用资源或代码的建议是什么?

  9. 任何其他信息将不胜感激。

1 个答案:

答案 0 :(得分:0)

传统上,在Windows开发中,资源文件直接嵌入可执行二进制文件中。我不认为这种特殊的资源方法在Windows之外被广泛使用,但Java通过将资源与可执行位一起存储在压缩存档中,具有跨平台的方式来做同样的事情。您可以在Android开发中看到相同的内容,其中资源嵌入在APK文件中。使用XML指定资源非常常见(除了在Windows二进制文件中)。

将资源打包成可执行文件具有提供“单文件解决方案”的潜在优势;可执行文件包含所有捆绑在一个文件中的应用程序逻辑和支持资源。这在某些情况下可能会有所帮助,但很难找到可以作为单个文件分发的实际应用程序。无论如何,这种打包资源的方法可以追溯到Windows开发的早期阶段;微软可能已经采用了当时其他桌面微平台上常见的方法,我猜这些方法现在已经很久了。

资源允许以声明方式而不是代码中指定某些内容(通常是用户界面元素)。一个很好的功能是允许这些声明性元素依赖于语言环境。因此,例如,我们可以为英语指定主菜单,为法语指定一个主菜单,依此类推,并在运行时选择正确的菜单。

使用图形设计工具编写和编辑声明性资源文件比编写代码更容易,尽管直接输出代码并非不可能。无论如何,将用户界面元素与应用程序逻辑分开通常被认为是“更好”。通过精心设计,可以在应用程序本身最终完成后编辑用户界面位和其他资源,并且可以单独维护。

经典Windows资源由资源编译器编译为压缩二进制格式,以该格式戳入对象(.obj,.o)文件,然后由链接器链接到可执行文件中。我怀疑使用现代开发工具,所有这些东西都是完全隐藏的,你只看到最终的可执行文件。 Windows API知道如何从可执行文件中解压缩资源,并将它们转换为程序化表示 - 而不是代码,而是内存中可供其他API调用使用的数据。

根据我的经验,Windows(二进制)资源与显式编码相比没有任何显着的开销,尽管处理基于XML的资源可能会慢一些。

编写用户界面通常比使用资源更灵活;在同一个应用程序中使用这两种方法并不罕见。