0

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

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

4

1 回答 1

0

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

于 2013-07-17T01:08:23.130 回答