文档摘要:
QLibrary用于动态加载dll,其实例在单个共享对象文件(我们称之为“库”,但也称为“DLL”)上运行,以独立于平台的方式提供对库中功能接口的访问。
使用时应调用load()来加载动态库文件,isLoaded()用于检查加载是否成功,resolve()用于解析库中的符号。如果库尚未加载,resolve()函数会隐式地尝试加载它。QLibrary的多个实例可用于访问同一物理库。加载后,库将保留在内存中,直到应用程序终止。您可以尝试使用unload()卸载库,但是如果QLibrary的其他实例正在使用同一个库,则卸载库将失败,并且只有在每个实例都调用unload()时才会发生卸载。
QLibrary的一个典型用法是解析库中导出的符号,并调用该符号表示的C函数。这被称为“显式链接”,与“隐式链接”不同,隐式链接是在构建过程中链接可执行文件与库时通过链接步骤完成的。
简单的例子:
main.cpp
QLibrary* mainFunDll = new QLibrary(filename);//加载指定路径的.dll
if (mainFunDll->load()) //若加载成功
{
getObj obj = (getObj)mainFunDll->resolve("getDllObj");//取出该符号
APPAPI* mF = obj();//调用接口
}
//mF即为从dll导出的类对象
.dll模块中的.cpp
MAINFUNC_EXPORT APPAPI* getDllObj() {
return new QtClassLibrary;//返回dll中的类对象,main.cpp中即可进行相应操作。
}