c# - 如何在 C# 中读取已编译的资源 (.res) 文件?

标签 c# resource-files

我有一个已编译的资源文件 (.res)。我需要在 C# 中阅读它,以便我可以通过编程方式修改它。请注意,这不是.resx 文件或.rc 文件;该文件是编译的,而不是基于文本的。

到目前为止,我尝试查看 Win32 API 中的 LoadLibrary、LoadResource 等,但这些函数似乎只适用于可执行文件(.exe、.dll),而不适用于资源文件。

我试过使用 BinaryReader 加载文件,但当然我无法理解生成的字节数组。 我想尝试使用 Marshal.PtrToStructure 但我不知道 res 文件的结构是什么。我有 RESOURCEHEADER 的结构,但我不明白如何使用它(我承认我的 native 代码经验很少)。

谁能帮我弄清楚如何成功读取和更新 .res 文件中的版本信息?

最佳答案

很好的问题;我也找不到使用现有功能的好答案。幸运的是,RES 文件格式似乎相对简单,记录在此处:

http://msdn.microsoft.com/en-us/library/ms648007(VS.85).aspx

您应该能够扫描 RES 文件以查找版本资源,然后更新相应的字段。请记住,资源 header 是 DWORD 对齐的。

我唯一的其他建议是使用 LoadLibraryEx 并查看是否可以以某种方式将 RES 文件作为数据文件加载。但听起来你已经尝试过了。如果您确实成功了,您可能会发现这个主题很有趣 - 这是一个如何在两个模块之间复制资源的示例:

http://msdn.microsoft.com/en-us/library/ms648008(VS.85).aspx

我怀疑它是否会起作用。我在 Dependency Walker 中加载了 RC.EXE 以查看它是否使用任何有趣的 API 来构建 RES 文件。我没有找到任何东西,所以我只能假设 RC.EXE 直接写出 RES 文件。

关于c# - 如何在 C# 中读取已编译的资源 (.res) 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7982181/

相关文章:

c# - ReSharper 代码清理/重新格式化代码功能与版本控制系统

c# - xpath 查询在网页中搜索字符串

c# - 将在 C# 中创建的哈希与 sql 匹配

dll - 在 dll 集合中搜索字符串

windows - 如何将已编译的资源 (.res) 文件链接到可执行文件

c# - .NET 加载不正确的资源文件

c# - 如何使用 FluentAssertions 编写 CustomAssertion?

c# - 使用接口(interface)作为构造函数参数

c# - 将常量映射到列表填充和查找的资源字符串

javascript - asp.net:资源 .resx 文件中的换行符\n 不起作用