当前位置: 首页 > 经济

QLibrary基本概念及实例

来源:QT教程    时间:2023-05-05 06:06:36

QLibrary类是在程序运行时加载动态动态链接库的。


(相关资料图)

可以通过使用构造函数添加需要加载的链接库路径,或者使用setFileName()函数设置路径。如果是绝对路径就直接加载,如果是相对路径QLibrary会在相当路径及所有环境变量中寻找。

如果都找不到,会通过平台的不同,去加对应的.so或.dll文件。

这个意思就是,当在windows上加载lib库的参数为demo,那么QLibrary会在后面加.dll。如果是linux就会加.so。

通过调用load()函数加载链接库,使用isLoad()函数去判断加载是否成功,使用resolve()与load()差不多,但是当如果load失败,将会尝试再次加载。当经过一次加载后,链接库将会存储到内存中直到应用程序退出。使用unload()函数解除,如果有多个QLibrary使用了同一个动态链接库unload()将返回false。直到最后一个QLibrary解除,才会成功。

这里有2个概念:

显式链接:直接在代码中解析出函数名,这种方式叫显式。

隐式链接:在程序构建过程中参与链接过程。

这里有个要注意的此处只能搞C的dll,不能搞c++的dll

这里有2个调用法:

方法1:

QLibrary myLib(\"mylib\");typedef void (*MyPrototype)();MyPrototype myFunction = (MyPrototype) myLib.resolve(\"mysymbol\");if (myFunction)myFunction();

方法2:

typedef void (*MyPrototype)();MyPrototype myFunction =(MyPrototype) QLibrary::resolve(\"mylib\", \"mysymbol\");if (myFunction)myFunction();

下面是一个例子:

使用MSVC2015编译的DLL

一个加和一个减的函数:

使用Qt进行调用(这里用WinGW)

Qt代码如下:

#include #include #include int main(int argc, char *argv[]){QCoreApplication a(argc, argv);QLibrary myLib(\"D:\QtProject\libraryDemo\DLL_C_Demo\");typedef int (*Add)(int a, int b);Add function = (Add)myLib.resolve(\"Add\");if(function){qDebug() << function(10, 20);}qDebug() << \"----------华丽的分割线----------\";typedef int (*Sub)(int a, int b);Sub function2 = (Sub)QLibrary::resolve(\"D:\QtProject\libraryDemo\DLL_C_Demo.dll\", \"Sub\");if(function2){qDebug() << function2(10, 100);}return a.exec();}

两个程序下载仓库:

https://github.com/fengfanchen/Qt/tree/master/sharedLibrariesDemo

【领 QT开发教程 学习资料, 点击下方链接莬费领取↓↓ ,先码住不迷路~】

点击这里:

推荐内容

Copyright   2015-2022 太平洋商务网 版权所有  备案号: 豫ICP备2022016495号-17   联系邮箱:93 96 74 66 9@qq.com