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

Ass*_*one 7 c# resource-files

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

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

我尝试用BinaryReader加载文件,但当然我对结果字节数组没有多大意义.我想过尝试使用Marshal.PtrToStructure,但我还不知道res文件的结构是什么.我有RESOURCEHEADER的结构,但我无法理解如何使用它(我承认我的本机代码经验很少).

有人可以帮我弄清楚如何成功阅读和更新.res文件中的版本信息吗?

Jam*_*ton 3

非常好的问题;我也无法使用现有函数找到一个好的答案。幸运的是,RES 文件格式似乎比较简单,文档如下:

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

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

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

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

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