Windows 中的资源文件如何工作以及为什么要使用它们?
How resource files in Windows work and why use them?
我对每次 tutorial/book 使用资源文件感到沮丧,但从不解释它们为什么使用它们或它们在幕后如何工作。我一直无法找到任何关于此的信息。我希望有人可以创建一个 public 答案供大家稍后查找。
一些相关信息可能包括...
资源文件背后的原理是什么?
它们是功能还是Windows或语言编译器?
为什么不直接通过代码创建 GUI?
是否存在只能使用资源文件或者只能使用代码的情况?
如何在运行时将资源文件条目转换为实际的 window 对象?
资源编译器究竟对条目做了什么,编译后的格式包含什么?
使用资源文件而不是代码创建的加载时间有差异吗?
您对使用资源或代码有何建议?
任何额外信息将不胜感激。
在传统的Windows 开发中,资源文件直接嵌入到可执行二进制文件中。我不认为这种特殊的资源方法在 Windows 之外被广泛使用,但 Java 有一种跨平台的方式来做同样的事情,将资源与可执行位一起存储在压缩存档中。您可以在 Android 开发中看到同样的事情,其中资源嵌入到 APK 文件中。使用 XML 指定资源很常见(Windows 二进制文件除外)。
将资源打包成可执行文件具有提供 "single-file solution" 的潜在优势;可执行文件包含应用程序逻辑和支持资源,所有这些都捆绑在一个文件中。这在某些情况下可能会有所帮助,但很难找到可以作为单个文件分发的大量应用程序。无论如何,这种打包资源的方法可以追溯到 Windows 开发的早期;微软可能借鉴了当时其他桌面微平台中常见的方法,我想所有这些方法现在都已经过时了。
资源允许以声明方式而非代码方式指定某些事物(通常是用户界面元素)。一个很好的特性是允许这些声明性元素依赖于语言环境。因此,例如,我们可以为英语指定一个主菜单,为法语指定一个主菜单,等等,然后在 运行 时间选择合适的菜单。
让图形设计工具编写和编辑声明性资源文件比编写代码更容易,尽管让它们直接输出代码并非不可能。无论如何,通常认为 "nicer" 将用户界面元素与应用程序逻辑分开。通过精心设计,用户界面位和其他资源可以在应用程序本身完成后进行编辑,并且可以单独维护。
经典 Windows 资源由资源编译器编译成打包的二进制格式,以该格式插入对象 (.obj, .o) 文件,然后由链接器链接到可执行文件中。我怀疑使用现代开发工具,所有这些东西都被完全隐藏了,你只能看到最终的可执行文件。 Windows API 知道如何从可执行文件中解压资源,并将它们转化为程序表示——不是代码本身,而是内存中可供其他 API 使用的数据来电。
根据我的经验,Windows(二进制)资源与显式编码相比没有任何显着开销,尽管处理基于 XML 的资源可能会慢一些。
编写用户界面代码通常比使用资源更灵活;在同一应用程序中使用这两种方法的情况并不少见。
我对每次 tutorial/book 使用资源文件感到沮丧,但从不解释它们为什么使用它们或它们在幕后如何工作。我一直无法找到任何关于此的信息。我希望有人可以创建一个 public 答案供大家稍后查找。
一些相关信息可能包括...
资源文件背后的原理是什么?
它们是功能还是Windows或语言编译器?
为什么不直接通过代码创建 GUI?
是否存在只能使用资源文件或者只能使用代码的情况?
如何在运行时将资源文件条目转换为实际的 window 对象?
资源编译器究竟对条目做了什么,编译后的格式包含什么?
使用资源文件而不是代码创建的加载时间有差异吗?
您对使用资源或代码有何建议?
任何额外信息将不胜感激。
在传统的Windows 开发中,资源文件直接嵌入到可执行二进制文件中。我不认为这种特殊的资源方法在 Windows 之外被广泛使用,但 Java 有一种跨平台的方式来做同样的事情,将资源与可执行位一起存储在压缩存档中。您可以在 Android 开发中看到同样的事情,其中资源嵌入到 APK 文件中。使用 XML 指定资源很常见(Windows 二进制文件除外)。
将资源打包成可执行文件具有提供 "single-file solution" 的潜在优势;可执行文件包含应用程序逻辑和支持资源,所有这些都捆绑在一个文件中。这在某些情况下可能会有所帮助,但很难找到可以作为单个文件分发的大量应用程序。无论如何,这种打包资源的方法可以追溯到 Windows 开发的早期;微软可能借鉴了当时其他桌面微平台中常见的方法,我想所有这些方法现在都已经过时了。
资源允许以声明方式而非代码方式指定某些事物(通常是用户界面元素)。一个很好的特性是允许这些声明性元素依赖于语言环境。因此,例如,我们可以为英语指定一个主菜单,为法语指定一个主菜单,等等,然后在 运行 时间选择合适的菜单。
让图形设计工具编写和编辑声明性资源文件比编写代码更容易,尽管让它们直接输出代码并非不可能。无论如何,通常认为 "nicer" 将用户界面元素与应用程序逻辑分开。通过精心设计,用户界面位和其他资源可以在应用程序本身完成后进行编辑,并且可以单独维护。
经典 Windows 资源由资源编译器编译成打包的二进制格式,以该格式插入对象 (.obj, .o) 文件,然后由链接器链接到可执行文件中。我怀疑使用现代开发工具,所有这些东西都被完全隐藏了,你只能看到最终的可执行文件。 Windows API 知道如何从可执行文件中解压资源,并将它们转化为程序表示——不是代码本身,而是内存中可供其他 API 使用的数据来电。
根据我的经验,Windows(二进制)资源与显式编码相比没有任何显着开销,尽管处理基于 XML 的资源可能会慢一些。
编写用户界面代码通常比使用资源更灵活;在同一应用程序中使用这两种方法的情况并不少见。