C ++ Winapi在.exe文件中包含DLL

时间:2013-07-16 22:56:25

标签: c++ mysql winapi win32gui

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

我尝试了这一部分:embed DLL in MFC C++ EXE? 但程序仍然要求dll ..(但我确实看到.exe的大小已经改变)所以dll已被添加。 但该程序仍然要求libmysql.dll .. 所有的一点是在.exe文件中使用它.. 感谢。

1 个答案:

答案 0 :(得分:0)

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