C++运行时修改资源

7

在运行时程序是否可以通过编程方式编辑可执行文件的资源?如果可以,如何操作?如果不行,是否有其他程序可以轻松地用来修改资源?

谢谢,Derek。


你是指Windows资源吗?这是特定于平台的,对吗? - Scott Saad
1个回答

1
是的,虽然不太容易,但这是可能的。基本上需要编写资源编译器(至少要针对您想要修改的资源类型)。
例如,我曾经编写过一个菜单编译器,它从数据库中获取输入(然后将结果保存回数据库)。如果源表未更改,则使用现有资源,否则进行重建。
在菜单资源(以及我认为是对话框)的情况下,棘手的部分在于某些成员仅根据标志设置而存在,以及严格的对齐要求。
在修改已经存在于.exe中的资源的情况下,您需要将资源数据复制到内存缓冲区中(如果添加新元素,则需要额外的空间)(通过使用FindResource、LockResource、内存复制,然后UnlockResource)。
在进行更改后,您可以使用其中一个间接创建函数(即CreateMenuIndirect),并传递缓冲区的地址。
资源API允许将这样的缓冲区写回应用程序二进制文件,但如果您使用代码签名,这将破坏签名,因此请非常小心。我也不知道该API是否适用于实际运行的程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接