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

C++ Winapi Including DLL in the .exe file

本文关键字:包含 DLL 文件 exe C++Winapi      更新时间:2023-10-16

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

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

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