动态链接库知识点总结之三(如何以显示的方式加载DLL)

摘要:
总结一下如何显示加载方式加载DLL,首先,我们新建一个win32项目,选择dll,空项目,再添加一个源文件,一个模块定义文件,具体如下图。为项目添加一个模块定义文件,编辑代码,如下图新建一个DLL测试应用程序,项目名字:TestDLL,添加一个按钮,属性如下,先编译一下。函数LoadLibrary()作用是将可执行模块映射到进程的地址空间,通俗点来说,就是可以用来加载DLL的,这个函数是显示加载DLL的重要函数。

总结一下如何显示加载方式加载DLL,

首先,我们新建一个win32项目,选择dll,空项目,再添加一个源文件,一个模块定义文件(.def),具体如下图。(详细方法已经在前两篇文章中讲述,如有不懂,打开链接查看)

(1)新建项目,名称为:dll,添加一个源文件(.cpp),编代码,编译文件 。

动态链接库知识点总结之三(如何以显示的方式加载DLL)第1张

动态链接库知识点总结之三(如何以显示的方式加载DLL)第2张

(2)为项目添加一个模块定义文件(上一篇文章中详细介绍)(先新建一个文本,再改属性名),编辑代码,如下图

动态链接库知识点总结之三(如何以显示的方式加载DLL)第3张

动态链接库知识点总结之三(如何以显示的方式加载DLL)第4张

(3)新建一个DLL测试应用程序(基于对话框的),项目名字:TestDLL,添加一个按钮,属性如下,先编译一下。

动态链接库知识点总结之三(如何以显示的方式加载DLL)第5张

(4)为按钮添加一个响应函数,编写如下代码(具体代码含义在最后介绍)

动态链接库知识点总结之三(如何以显示的方式加载DLL)第6张

(5)把已经编译好的DLL,选择.dll文件将拷贝到应用程序目录下(dll放在与该测试文件的.exe文件夹下(具体做法已在前两篇介绍过),如图

动态链接库知识点总结之三(如何以显示的方式加载DLL)第7张

动态链接库知识点总结之三(如何以显示的方式加载DLL)第8张

(7)点击,运行,成功运行,以显示的方式加载DLL成功

动态链接库知识点总结之三(如何以显示的方式加载DLL)第9张

现在介绍下,按钮消息响应函数中的代码含义。

函数LoadLibrary()作用是将可执行模块映射到进程的地址空间,通俗点来说,就是可以用来加载DLL的,这个函数是显示加载DLL的重要函数。参数是DLL的名称,这个函数在MSDN上有详细的解释,大家可以通过以下链接查看。该函数返回的是所加载的DLL的句柄。(点击打开链接

有了DLL的句柄,我们需要再获得导出函数的地址即可,获得地址,用此函数:GetProcAddress(),参数1是:DLL句柄,参数2:一个指针,指向导出函数的名字。该函数返回值如果为NULL,则获取地址失败。成功,则返回导出函数的导出地址。

有了地址,我们如何操纵函数,我们还需要一个函数指针,使用函数指针来调用导出函数。

在此我们总结一下:

动态加载DLL时,客户端程序不再需要包含引入库文件,只需要.dll文件即可。静态加载和动态加载各有各的优缺点,首先,静态加载DLL比较简单,但是如果需要加载的DLL过多的话会造成启动程序过慢,所以还是选择动态加载比较好。

免责声明:文章转载自《动态链接库知识点总结之三(如何以显示的方式加载DLL)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇微服务网关3-配置路由和跨域SqlServer查看锁表与解锁下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

windows server中opencv运行过程中MF.dll/MFReadWrite.dll/MFPlat.DLL文件丢失问题解决

windows server 2008/2012 使用opencv出现 DLL load failed错误,发现缺失部分dll:MFPlat.dll、MF.dll、MFReadWrite.dll等等,原因:服务器版本默认没有安装windows media player。1、解决方法1:使用如下步骤安装windows media player:1)、打开“服...

FireDAC 下的 Sqlite [1]

很长时间没静下心来写博客了, 现在回来, 是 Delphi 不断地进步让我感动、振奋.Delphi XE5 并入了 FireDAC, 第一印象非常好, 恐怕 dbExpress 等等都要靠边站了.让我最高兴地是 FireDAC 对 Sqlite 的支持!优秀的 Sqlite 早就有很多 Delphi 的包装(http://www.sqlite.org/cv...

VS中合并dll 方便发布

     过程简介:在VS2012中通过NuGet安装ILmerge和MSBuild.ILMerge.Task,在程序编译时,经过这两个插件直接自动将exe和dll打包成一个exe放置在debug或release文件夹中,或者将dll合成一个dll。    首先,我们需要当前VS所适配的最新的NuGet,这一点可以在Nuget官网下载相应版本或者将VS更新...

CAD开发中遇到的疑难问题整理与开发技巧

1.Winform窗体与CAD关系、窗体与CAD焦点切换非模态窗口修改CAD图元 在非模态窗口中修改实体时,需要将图层锁定,否则会报错;模态窗口则无此情况。 Winfrom中打开DWG图纸文件 如果要在Winform中打开DWG图形文件,这个Form必须用Application.ShowModelessDialog方式显示,不然会报错(执行环境无效)。 模...

VC++通过动态生成并加载DLL,实现可执行文件的自删除

void WriteResourceToFile(HINSTANCE hInstance,int idResource,char const *filename) { // 存取二进制资源 HRSRC hResInfo = FindResource(hInstance, MAKEINTRESOURCE(idResour...

将Qt5.5 动态链接生成的exe及依赖dll打包方法

Qt静态编译链接生成的exe文件,不需依赖七大姑八大姨的一堆dll,可以独立运行,发布很方便。但绝大多数用的都是Qt开源版本,如果用静态链接,会有些限制。那有没有办法即能享受静态编译的方便,又不受开源许可的限制呢?方法之一,就是用动态编译,然后把exe和需要的dll整合成一个文件,问题就解决了。 使用工具: Enigmavb(单文件封装工具) 下载:htt...