c++ 在运行时修改资源

Posted

技术标签:

【中文标题】c++ 在运行时修改资源【英文标题】:c++ modify resources at runtime 【发布时间】:2008-12-04 00:40:36 【问题描述】:

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

谢谢,德里克。

【问题讨论】:

你是说Windows资源吗?这是特定于平台的,是吗? 【参考方案1】:

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

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

在菜单资源(我相信对话框)的情况下,棘手的一点是某些成员仅根据标志设置以及严格的对齐要求存在。

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

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

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

【讨论】:

以上是关于c++ 在运行时修改资源的主要内容,如果未能解决你的问题,请参考以下文章

在运行时删除/修改静态 Qt 资源

在运行时更改嵌入式资源文件

C# / C++ 应用程序在从 Windows 运行时崩溃,而不是从 Visual Studio 运行

线程共享资源 C++

如何在已修改为不运行资源管理器的 Windows 系统上启动时运行应用程序

visual studio 2013 在运行.exe 时修改路径变量