【问题标题】:How to link a compiled resource (.res) file into an executable如何将已编译资源 (.res) 文件链接到可执行文件
【发布时间】:2015-01-18 18:52:14
【问题描述】:

我想做的是以编程方式更新可执行文件的资源。

我有一个包含位图、图标、版本信息和清单的二进制资源 (.res) 文件,使用 resource editor 创建,以及一个使用 AutoHotkey 编译的 PE 文件,我想将 .res 中的资源复制到该文件文件。

到目前为止,我曾经在命令提示符下使用 ResourceHacker 执行此操作,但 ResourceHacker 无法重新分发,此外我希望更优雅地执行此操作。

所以我在查看 WinAPI 函数,似乎有办法做到这一点:http://msdn.microsoft.com/en-us/library/windows/desktop/ms648008%28v=vs.85%29.aspx
但问题是文章描述了如何将资源从一个可执行文件复制到另一个,并且不能用LoadLibrary/LoadLibraryEx导入非可执行文件(.res文件)。

似乎还有一种方法可以使用 Visual Studio 中的工具执行此操作,尤其是 LINK.exe。但我不确定它是否可以在 VS 环境之外使用。我不知道它是如何工作的。

【问题讨论】:

    标签: windows visual-studio winapi portable-executable resource-files


    【解决方案1】:

    您可以使用UpdateResource function 以编程方式更新资源

    不涉及RES文件。 RES 文件被项目 makefile 系统用来最小化资源的重建……它们不必在每次应用程序重新链接时重新编译,只需嵌入。但是您不会重新链接应用程序并丢失现有资源,因此只需更新您想要更改的资源即可。

    如果您的源资产已经编码在 RES 文件中,那么this page describing "Resource File Formats" 可以帮助您提取它们。它还描述了使用 LINK.exe 进行资源嵌入。 LINK.exe 作为 Visual Studio 的一部分安装,但它也可用于许多版本的 Platform SDK 和 Windows DDK。

    【讨论】:

    • 我知道我可以使用 UpdateResource 函数通过将原始二进制数据传递给它来更新资源,但我希望我可以像 this article 中描述的那样使用 res 文件来执行此操作。但我想单独处理每个资源是要走的路。不过,RES 文件对我来说更容易编辑。
    • 我不知道编译后的 RES 文件是否比它们的源 RC 脚本更容易编辑。你使用什么编译器设置?
    • @andlabs 这是一个不寻常的设置。 AHK 脚本文件是用不支持自定义资源的 AutoHotkey 编译器编译的。 RES文件是用很酷的resource editor创建的,还可以生成RC脚本。到目前为止,我已经设法使用 UpdateResource 函数更新位图,但图标有点棘手。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多