• 忘掉天地
  • 仿佛也想不起自己
  • 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2019-10-02 06:21 Aet 隐藏边栏 |   抢沙发  4 
文章评分 1 次,平均分 5.0

加载

  • 双击.exe的时候,该.exe被加载到内存当中,形成一个进程
  • 在这个过程中,DLL也会被加载到内存中
  • DLL被加载后处于被占用的状态,不能对它进行修改删除等操作
  • DLL被卸载后,可以对它进行操作
  • 对于占用同一个DLL的不同进程,不可比较DLL中变量的地址,因为DLL数据段每个进程都会拷贝一份,所以该地址会是虚拟地址

内容

DLL文件中,至少分为两个段

  • 代码段
    • 存储指令(函数体)
  • 数据段
    • 存放全局变量
  • 注意的地方
    • .dll被加载时,代码段只被加载一次,是公共的
    • 而数据段会被每个程序都拷贝一份,是私有的,即各进程间不受影响

内存

  • 在DLL里使用malloc分配的内存,应该使用DLL中提供的free方法来释放

头文件

  • DLL应该附带一份头文件,使用者根据头文件中的相应声明来规范使用
  • 设计原则
    • 在DLL项目中,需要将函数声明为_declspec(dllexport)
    • 在APP项目中,需要将函数声明为_declspec(dllimport)
  • 实现方法
    • 条件编译指令
  • 实例代码
    • DLL mydll.h
    • DLL mydll.cpp
    • 编出DLL
    • APP main.cpp(在使用到DLL的APP里面)
    • DLL中导出类
    • 导出类的定义,其实就是导出类的成员函数

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2021-11-21
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享