我有一个已编译的资源文件 (.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/