我有一个已编译的资源文件(.res)。我需要在C#中阅读它,以便我可以以编程方式修改它。请注意,这是不 .resx文件或.rc文件;该文件是编译的,而不是基于文本的。
到目前为止,我尝试在Win32 API中查看LoadLibrary,LoadResource等,但似乎这些函数仅适用于可执行文件(。exe,.dll),而不是资源文件。
我尝试使用 BinaryReader 加载文件,但当然我无法理解结果字节数组。 我想过尝试使用 Marshal.PtrToStructure ,但我还不知道res文件的结构是什么。我有RESOURCEHEADER的结构,但我无法理解如何使用它(我承认我的本机代码经验很少)。
有人可以帮我弄清楚如何成功阅读和更新.res文件中的版本信息吗?
答案 0 :(得分: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文件。