Qt文档阅读笔记-QLibrary基本概念及实例
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 <QCoreApplication> #include <QLibrary> #include <QDebug>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文档阅读笔记-QLibrary基本概念及实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软考网络工程师笔记-综合知识2
- 下一篇: Qt笔记-AES加密