前提概述:
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相同。
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相同。