【问题标题】:C++ Winapi Including DLL in the .exe fileC++ Winapi 在 .exe 文件中包含 DLL
【发布时间】:2013-07-16 22:56:24
【问题描述】:

我正在使用 MYSQL 库和 libmysql.lib /.dll。 没有 libmysql.dll,我的程序无法运行 当我尝试在没有 dll 的情况下运行我的项目时,我收到了该错误消息。 我基本上想要做的是把那个dll放在我的.exe文件中。 使用该 dll 构建 .exe 文件并让程序自己读取它。 我的意思是,把程序交给里面有那个 dll 的人。 有可能吗?

我试过这个部分:embed DLL in MFC C++ EXE? 但程序仍然要求 dll ..(但我确实看到 .exe 的大小已更改)因此已添加 dll。 但程序仍然要求 libmysql.dll .. 关键是在 .exe 文件中使用它。 谢谢。

【问题讨论】:

  • 构建一个安装程序来安装您的代码以及 libmysql.dll 可能是一个更好的主意。
  • 不确定是否可以使用 MySQL,但听起来您想静态链接到库

标签: c++ mysql winapi win32gui


【解决方案1】:

如果您在编译时静态链接到 DLL,您所要求的将无法完成。您需要在运行时动态链接到 DLL,或者通过显式调用 LoadLibrary()GetProcAddress() 直接访问 DLL 函数,或者利用编译器的延迟加载功能(它在内部使用LoadLibrary()GetProcAddress(),但从你的代码中隐藏了这个事实)。无论哪种方式,您都可以在编译时将 DLL 存储在 EXE 的资源中,然后在运行时将资源提取到临时文件并根据需要加载/使用它(您不能从 EXE 的资源中使用 DLL嗯,有一种方法可以做到,但它是一种非常复杂和先进的技术,因为它需要实现你自己的可执行加载器,它基本上模仿了操作系统的内置可执行加载器已经做的事情)。使用完 DLL 后,您可以将其从内存中卸载并删除临时文件。

【讨论】:

  • 谢谢,所以我会考虑别的:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
  • 1970-01-01
  • 2013-10-24
相关资源
最近更新 更多