如何将二进制数据嵌入/链接到 Windows 模块中

Posted

技术标签:

【中文标题】如何将二进制数据嵌入/链接到 Windows 模块中【英文标题】:How to Embed/Link binary data into a Windows module 【发布时间】:2011-02-13 23:20:44 【问题描述】:

所以我有一个 Visual Studio 2008 项目,其中包含大量当前正在引用的二进制数据。我想像使用 C# 一样打包二进制数据,将其添加为“资源”并将其编译为 DLL。

假设我的所有数据都具有“.data”的扩展名,并且当前正在从 Visual Studio 项目中读取。

有没有一种方法可以将数据编译或链接到它正在调用的 .dll 中?

我已经查看了一些谷歌链接,但到目前为止我还没有想出任何东西 - 我想出的唯一可能的解决方案是使用类似 ResGen to create a .resources file 的东西,然后使用链接它AssemblyLinker 带有 /Embed 或 /Link 标志。我认为它不能正常工作,因为我没有文本文件来创建 .resources 文件,而是二进制文件本身。

有什么建议吗?

【问题讨论】:

【参考方案1】:

您可以将二进制数据嵌入为 C 语言数组 - 完全不涉及任何资源。 一个古老的经典技巧。 参见例如XD

【讨论】:

【参考方案2】:
    右键单击资源脚本(.rc 文件) 选择导入

http://msdn.microsoft.com/en-us/library/saced6x2.aspx

您可以嵌入任何您想要的“自定义”文件,以及诸如 .bmps 之类的内容以及 VisualStudio“知道”如何编辑的内容。然后你可以使用你的框架的资源函数来访问它们,比如FindResourceLoadResource等等......

如果您没有资源脚本。

    点击项目 添加新项目 资源脚本

http://msdn.microsoft.com/en-us/library/sxdy04be(v=VS.71).aspx

【讨论】:

如何用这个导入二进制数据?使用“位图 (.bmp)、图标 (.ico)、光标 (.cur)、html 文件 (.htm)”看起来很容易,但是如何导入“其他”数据呢? 没有资源脚本怎么办? @CrimsonX 当您导入 Visual Studio 无法理解或编辑的文件时,即使它无法读取它,它仍然可以将其推入 PE 文件的数据(可执行文件或 dll)中。 “资源”只是 exe 或 dll 的数据部分中的文件。 msdn.microsoft.com/en-us/magazine/cc301805.aspx 感谢罗伯特的澄清和帮助,我会试试这个。非常感谢。

以上是关于如何将二进制数据嵌入/链接到 Windows 模块中的主要内容,如果未能解决你的问题,请参考以下文章

在本机 Windows 应用程序的资源中嵌入文本文件

如何通过 USB 将数据从 Windows 发送到嵌入式 Linux

将 boost 二进制文件嵌入到 xcode 项目中

我如何将文件输入链接到对象嵌入的源

Tensorflow:如何将预训练模型已经嵌入的数据输入到 LSTM 模型中?

嵌入式二进制文件和链接框架之间有什么区别