加载
- 双击.exe的时候,该.exe被加载到内存当中,形成一个进程
- 在这个过程中,DLL也会被加载到内存中
- DLL被加载后处于被占用的状态,不能对它进行修改删除等操作
- DLL被卸载后,可以对它进行操作
- 对于占用同一个DLL的不同进程,不可比较DLL中变量的地址,因为DLL数据段每个进程都会拷贝一份,所以该地址会是虚拟地址
内容
DLL文件中,至少分为两个段
- 代码段
- 存储指令(函数体)
- 数据段
- 存放全局变量
- 注意的地方
- .dll被加载时,代码段只被加载一次,是公共的
- 而数据段会被每个程序都拷贝一份,是私有的,即各进程间不受影响
内存
- 在DLL里使用malloc分配的内存,应该使用DLL中提供的free方法来释放
头文件
- DLL应该附带一份头文件,使用者根据头文件中的相应声明来规范使用
- 设计原则
- 在DLL项目中,需要将函数声明为
_declspec(dllexport)
- 在APP项目中,需要将函数声明为
_declspec(dllimport)
- 在DLL项目中,需要将函数声明为
- 实现方法
- 条件编译指令
- 实例代码
- DLL mydll.h
- DLL mydll.cpp
- 编出DLL
- APP main.cpp(在使用到DLL的APP里面)
- DLL中导出类
- 导出类的定义,其实就是导出类的成员函数
- DLL mydll.h
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!