码迷,mamicode.com
首页 > 其他好文 > 详细

VS2015_动态链接库学习

时间:2017-08-18 23:48:53      阅读:293      评论:0      收藏:0      [点我收藏+]

标签:microsoft   默认   指定   wal   文件中   需要   创建   引入   lin   

非MFC动态链接库

创建一个名为ex1的Win32项目
技术分享
创建一个DLL项目,保留预编译的头文件
 技术分享

 默认文件

创建完成项目之后,包含几个默认的文件
 技术分享
stdafx.h文件用于包含标准系统包含的头文件
技术分享
 对应于stdafx.cpp文件,主要包含stdafx.h的头文件
技术分享
 targetver.h主要用于定义dll可以使用的最高的Windows版本
技术分享
 dllmain.cpp用于定义dll的程序入口点
技术分享
 dllmain函数是加载dll时候的入口函数
 
创建ex1.h文件,定义导出的变量和导出的函数
技术分享
 可以快速创建文件,在dllmain.cpp中定义add和sub的函数
 技术分享
  可以修改dllmain.cpp文件,定义程序入口函数处,设置Num=100
 技术分享
 编译函数,得到dll文件
技术分享

 使用Dependency查看DLL的情况

如果没有找到可以独立下载:http://www.dependencywalker.com/ 
发现我们定义好的函数和变量
技术分享
这里的Function定义都有明确的含义,C++默认使用__cdecl调用的约定 
技术分享

DLLMain函数
Windows在加载DLL的时候,需要一个入口函数,即DLLMain函数。如果没有为DLL编写一个DLLMain函数,则系统会自动引入一个不做任何处理的默认DLLMain函数
函数内部根据dll被加载的原因进行不同的操作
名称作用备注
DLL_PROCESS_ATTACH进程被调用,DLL被连接到当前进程并被初始化
DLL_THREAD_ATTACH当前进程创建一个新线程,DLL在新线程内被调用
DLL_PROCESS_DETACH调用DLL的进程被终止,DLL被卸载
DLL_THREAD_DETACH调用DLL的线程被终止,DLL被卸载
 技术分享

 DLL库的调试

由于dll文件不能单独调试,所以需要创建一个调试dll工程的project,这里创建一个Win32的控制台应用程序
技术分享
创建完成后,将这个项目设置为启动项
技术分享

应用过程使用隐式链接方式调用ex1.dll文件

DLL生成的时候,会配套生成一个LIB文件,这个文件中定义了DLL的变量和函数
DLL加载的过程中,Windows将按照如下的顺序来定位DLL
- 包含EXE文件的目录
- 进程的当前工作目录
- Windows系统目录
- Windows目录
- 列在PATH环境变量中的一系列目录
将LIB库文件添加到项目中,一共有3中方法
1.通过属性配置附加依赖项
技术分享
 加载完成后,声明一下来自外部的函数,即可在后文去应用这些函数了
 技术分享
 2.通过程序代码中添加LIB文件导入
先删除程序配置中的附加依赖项,然后尝试编译,发现无法通过编译
技术分享
在语句中添加LIB导入内容
技术分享
这里需要注意的是,附加目录库需要指定
技术分享
  3.通过文件的方式直接添加LIB文件
技术分享
 

应用工程以显示连接方式调用ex1.dll文件

显示调用需要使用代码的方式链接dll,使用显式链接方式可以在应用程序执行过程中随时加载DLL,也可以随时卸载DLL,这是隐式无法做到的。
好处:可以在启动程序时,不必将所有的应用DLL一起加载到DLL内存中,只有在使用某个DLL的时候才会载入,这样可以减少应用程序初始化加载的时间,可以降低内存的使用

这里暂时不做过多深入,等后续需要的使用继续学习


 使用非MFC DLL 导出类

如果建立的DLL不需要使用MFC,为了节约磁盘和内存空间,可以建立非MFC动态库
创建一个ex2的非MFC动态链接库
技术分享
新建一个头文件ex2.h,在这个头文件中定义一个类
技术分享
 使用Dependency可以查看类的导出内容,比较复杂,所以不适合使用def的方式进行
技术分享
 为了测试我们的DLL,新建一个Console工程进行测试
技术分享
如果要调用lib文件,可以使用Solution的相对路径来完成项目库的导入操作
技术分享
 


 

 
 




VS2015_动态链接库学习

标签:microsoft   默认   指定   wal   文件中   需要   创建   引入   lin   

原文地址:http://www.cnblogs.com/EltonLiang/p/7392410.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!