日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt文档阅读笔记-QLibrary基本概念及实例

發(fā)布時(shí)間:2025/3/15 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt文档阅读笔记-QLibrary基本概念及实例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

QLibrary類是在程序運(yùn)行時(shí)加載動態(tài)動態(tài)鏈接庫的。

?

可以通過使用構(gòu)造函數(shù)添加需要加載的鏈接庫路徑,或者使用setFileName()函數(shù)設(shè)置路徑。如果是絕對路徑就直接加載,如果是相對路徑QLibrary會在相當(dāng)路徑及所有環(huán)境變量中尋找。

?

如果都找不到,會通過平臺的不同,去加對應(yīng)的.so或.dll文件。

?

這個(gè)意思就是,當(dāng)在windows上加載lib庫的參數(shù)為demo,那么QLibrary會在后面加.dll。如果是linux就會加.so。

?

通過調(diào)用load()函數(shù)加載鏈接庫,使用isLoad()函數(shù)去判斷加載是否成功,使用resolve()與load()差不多,但是當(dāng)如果load失敗,將會嘗試再次加載。當(dāng)經(jīng)過一次加載后,鏈接庫將會存儲到內(nèi)存中直到應(yīng)用程序退出。使用unload()函數(shù)解除,如果有多個(gè)QLibrary使用了同一個(gè)動態(tài)鏈接庫unload()將返回false。直到最后一個(gè)QLibrary解除,才會成功。

?

這里有2個(gè)概念:

顯式鏈接:直接在代碼中解析出函數(shù)名,這種方式叫顯式。

隱式鏈接:在程序構(gòu)建過程中參與鏈接過程。

這里有個(gè)要注意的此處只能搞C的dll,不能搞c++的dll

這里有2個(gè)調(diào)用法:

方法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();

?

?

?

下面是一個(gè)例子:

使用MSVC2015編譯的DLL

一個(gè)加和一個(gè)減的函數(shù):

使用Qt進(jìn)行調(diào)用(這里用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(); }

兩個(gè)程序下載倉庫:

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

?

?

總結(jié)

以上是生活随笔為你收集整理的Qt文档阅读笔记-QLibrary基本概念及实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。