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

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

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

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

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

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

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

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

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

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

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

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

在此我们总结一下:

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

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

  1. 无法加载 DLL“rasapi32.dll”: 动态链接库(DLL)初始化例程失败。

    无法加载 DLL“rasapi32.dll”: 动态链接库(DLL)初始化例程失败. 在Asp.Net项目中使用WebClient或HttpWebRequest时出现以上错误 解决方案:把以下代码放在 ...

  2. webpack中dev-server不写contentBase时如何设置可以显示页面并且加载js

    今天学习了dev-server这个配置,中间遇到疑惑,我写了contentBase是可以走通,可以再localhost:8080看到页面并且正确加载bundle.js的,但是这个contentBase ...

  3. 测试img在不显示时是否加载?

    一直搞不明白,隐藏的元素的背景图,在页面加载时,是否自动加载? img隐藏时,图片会加载吗? 测试代码如下: <!DOCTYPE html> <html> <head&g ...

  4. Android中高效的显示图片之一 ——加载大图

    在网上看了不少文章,发现还是官方文档介绍最详细,把重要的东西简单摘要出来.详细可看官方文档地址 ( http://www.bangchui.org/read.php?tid=9 ) . 在应用中显示图 ...

  5. xp系统重绘边框线不显示(首次加载没有触发paint事件)

    同样是,重绘边框事件,win7系统显示正常,而xp系统却不显示,这是什么原因造成的呢? 于是,小编开始百度,不停的查找原因,通过一番查找,小编也意外的收获了一些内容: 例如:窗口的拖动,放大,缩小,等 ...

  6. 【技巧】easyUI datagrid在隐藏时加载,显示时无法加载出界面

    注意在显示时调用再调用一次resize就可以显示出来 $("#"+datagridId).datagrid("resize");

  7. Android 显示 WebView ,加载URL 时,向webview的 header 里面传递参数

    1.主要布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:and ...

  8. Virtualbox安装增强功能时显示【未能加载虚拟光盘】

    我之前在安装Virtualbox时进行到安装增强功能时弹出了一个窗口,提示我"未能加载虚拟光盘到虚拟电脑",如下图 我尝试了多次都是这个情况,经过上网学习我找到了问题所在,我在第一 ...

  9. C++加载dll失败或显示乱码

    右键项目-属性-字符集-使用多字节字符集

随机推荐

  1. Windows下Qt连接MySql数据库

    1.设置环境变量,需添加如下的环境变量:      2.打开Qt Command Prompt,输入第一条命令:cd %QTDIR%\src\plugins\sqldrivers\mysql 后按回车 ...

  2. 通用简单的 分页 SQL

    select                ID,TITLE,CONTENT,USERNAME,REALNAME,UNIT,UNITID,NOWTIMES,ACCEPTERID,ACCEPTERNAM ...

  3. Linux 下多核CPU知识

    1. 在Linux下,如何确认是多核或多CPU: #cat /proc/cpuinfo 如果有多个类似以下的项目,则为多核或多CPU: processor  : 0 ...... processor  ...

  4. 《你是我的小羊驼》游戏ios源码

    <ignore_js_op> <ignore_js_op> <ignore_js_op> <ignore_js_op>源码下载:http://code. ...

  5. Windowsphone本地应用信息与市场信息的获取

    本地信息都存放在 WMAppManifest 里面,获取就不用说了...知道位置 就知道怎么获取了.. 主要是讲那个 市场上面的详情怎么获取,就是API调用显示在这个页面里面的详情: public v ...

  6. mysql中union与union all的区别

    当查询表结构完全相同的多张表的数据时: 1.当查询条件完全相同且不包括主键,此时用union查询会过滤掉查询出的重复的记录,及漏查记录:使用union all进行查询,则会查出所有的符合条件的记录,保 ...

  7. .NET Web开发总结

    在aspx文件中  创建控件 在右下角有控件信息 按类排序 会将控件信息安装类排序 点击控件 会增加属性页面的分页[事件]页面  可以增加其事件函数 字符串操作及其时间操作 fn_name.Inser ...

  8. jquery 仿手机屏幕切换界面效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. debug版本和release版本的区别?

    好久没有做web项目了,这项目完成了要发布网站,不好忘了 以前操作过的? 还好脑子还是有点印象 现还是 写个文档吧记录吧 免得 以后作别的了又忘了 那可不妙啊 网站发布步骤:1.先将

  10. ASP.NET常用代码汇总

    1. 打开新的窗口并传送参数: 传送参数:response.write("<script>window.open('*.aspx?id="+this.DropDownL ...