动态库加载验证结论

前提概述:
ADLL加载CDLL,BDLL加载CDLL。分为两种情况:1、ADLL和BDLL加载的CDLL同名但内容不同;2、ADLL和BDLL加载的CDLL同名且接口相同,但函数实现不同。根据这两种情况进行验证测试。
验证过程:
1、ADLL和对应的CDLL放在ADLL目录下;
2、BDLL和对应的CDLL放在BDLL目录下;
3、TestDLLApp动态加载ADLL目录下的ADLL;
4、TestDLLApp动态加载BDLL目录下的BDLL;
验证结果:
1、程序中设置环境变量,首先将ADLL目录全路径以及BDLL目录全路径添加到TestDLLApp进程的环境变量中;
2、ADLL和BDLL依赖的CDLL同名但内容不同:
   1)、动态加载ADLL和BDLL时,ADLL加载成功,但BDLL加载不成功,分析原因为:当进程加载ADLL时根据环境变量寻找ADLL的依赖项CDLL并加载,这里加载的CDLL是ADLL对应的CDLL(因为环境变量中ADLL的全路径在BDLL全路径之前)。当进程加载BDLL时,由于进程要先查找BDLL依赖的CDLL,所以会从环境变量设置的路径依次查找,当进程查找到ADLL的全路径时,就找到了ADLL对应的CDLL,并加载。但是BDLL依赖的CDLL和ADLL依赖的CDLL接口不同,所以加载BDLL会失败。反之如果在设置环境变量时,把BDLL的全路径设置在ADLL全路径之前,则BDLL加载成功,ADLL加载失败。
   2)、动态加载ADLL时设置环境变量时只把ADLL全路径设置进去,然后动态加载ADLL,并成功加载,执行完业务后,释放ADLL和依赖的CDLL。加载BDLL时,将环境变量设置为只把BDLL全路径添加进去,把ADLL的全路径删除。这样加载BDLL时就不会再ADLL全路径中查找,所以BDLL加载成功,执行完成后释放BDLL和CDLL。
3、ADLL和BDLL依赖的CDLL同名且接口相同,但内容不同:
   动态加载ADLL和BDLL时,ADLL和BDLL加载都成功,但是执行结果相同,由此可知,ADLL加载的CDLL和BDLL加载的CDLL相同。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值