c ++在运行时修改资源

时间:2008-12-04 00:40:37

标签: c++ winapi runtime resources

是否可以通过编程方式在运行时编辑可执行文件的资源?如果是这样,怎么样?如果没有,是否有另一个可以轻松用于修改资源的程序?

谢谢,德里克。

1 个答案:

答案 0 :(得分:1)

是的,这是可能的,虽然不是特别容易。它基本上需要编写资源编译器(至少对于要修改的资源类型)。

例如,我曾经编写过一个菜单编译器,它在运行时从数据库中取出输入(然后将结果保存回数据库)。如果源表未更改,则使用现有资源,否则重建它。

在菜单资源(我相信对话框)的情况下,棘手的一点是某些成员只会出现,具体取决于标志设置以及严格的对齐要求。

在修改.exe中已存在的资源的情况下,您需要将资源数据复制到内存缓冲区(如果要添加新元素,则可以使用额外的空间)(通过使用FindResource,LockResource,然后使用内存副本) UnlockResource)。

进行更改后,您可以使用其中一个间接创建函数(即CreateMenuIndirect)并传递缓冲区的地址。

资源API允许将这样的缓冲区写回应用程序二进制文件,但如果使用代码签名则会破坏签名,因此要非常小心。我也不知道该API是否适用于实际运行的程序。