【问题标题】:How to embed a DLL into a DLL?如何将 DLL 嵌入到 DLL 中?
【发布时间】:2021-12-15 04:50:30
【问题描述】:

我设法在 C++/Visual Studio 2010、2017 中创建了一个程序。现在我必须在另一个 DLL (A.dll) 中嵌入一个 DLL (B.dll)。

我成功执行了另一个使用 A.dll 的程序 (C.exe)。但我不知道如何将 DLL 嵌入到 DLL 中。

有可能吗?如果可以,我该怎么办?

我有A.dllB.dllC.exe 的解决方案。

【问题讨论】:

  • 您应该通过将 B 嵌入 A 来解释您试图解决的问题。您很可能走错了方向。
  • 嗯...我已经向任何用户发布了“A.dll”。因此,我必须在仅构建一个解决方案后获取“A.dll”。由于哨兵功能,A.dll 需要 B.dll。只需嵌入并在构建后获取唯一的 A.dll。
  • 我不确定我是否理解。你的应用程序的哪一部分依赖于 B?
  • B.dll 依赖于 A.dll。可执行文件(c.exe)所在的文件夹中必须有一个B.dll才能操作A.dll。但我想将 B.dll 插入 A.dll。
  • 如果我理解正确,你想隐藏 B。我不明白这一点(提供两个 dll 有什么问题?!),但如果你真的必须,请听从 Remy 的建议。请参阅此处的示例:https://blog.kowalczyk.info/article/zy/embedding-binary-resources-on-windows.html

标签: c++ dll


【解决方案1】:

如果您真的想将B.dll inside 嵌入A.dll,您可以通过.rc scriptB.dll 定义为A.dll资源A.dll 的项目中。然后,您可以在运行时使用B.dll,首先使用(Find|Load|Lock)Resource() 访问B.dll 资源的字节,然后使用(Create|Write)File() 将它们写入临时文件,然后再使用LoadLibrary() 加载该文件。

【讨论】:

  • 谢谢。我可以要求详细说明 .rc 脚本吗?
  • 脚本中是否存在B.dll方法?
  • @JuHyeonLee 您是否阅读了我在回答中链接到的文档?
  • 哦,我错过了链接,对不起。我读了它并将回复评论。谢谢!
【解决方案2】:

如果您的意思是通过“嵌入”链接,您可以使用相同的 .lib 文件为您的 B.dll 链接 A.dll,就像使用 C.exe 一样。

【讨论】:

  • 感谢您的评论。 C.exe 不包含 A.dll。因为动态链接,它需要A.dll在他们的目录中。但是我想在 A.dll 中包含 B.dll。
  • 您构建B.dll 以获得B.lib。你在你的A.exe 项目中链接B.lib,所以你的A.exe 依赖于B.dll。那正确吗? A.dll 也是如此。不管是静态链接还是动态链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 2017-12-22
  • 2019-08-28
  • 2013-05-26
  • 2013-02-03
  • 2010-10-14
相关资源
最近更新 更多