最近很少上论坛,这几次发现好几个问题都是围绕如何使用DLL中的接口而展开的。
问题描述:
具体问题就是在隐式使用接口变量后,在FreeLibrary执行后,就会出现一个非法访址的错误。
这个错误的原因就是在FreeLibrary后,DLL以的代码均为不可用状态,而在代码执行完整个过程后,VCL要对RTL类型的数据进行清理。而在清理过程中肯定要对接口进行减1并进行释放相关对象。而对象代码已从进程空间卸载,故报非法访址错误!
解决方法:
所以要想解决该问题,就应该把DLL调用过程放到一个单独的过程中,其目的就是让调用完毕后,让VCL来清理接口。清理完毕后返回后,再调用FreeLibrary来从进程空间中卸载DLL。
错误调用代码为:
正确的全过程为: