深度解析 Qt 中動態鏈結庫

2021-05-31 21:43:59 字數 1506 閱讀 6224

qlibrary也是用來載入動態鏈結庫,但它建立出來返回的是某個"方法的指標"(不需要標頭檔案),而qpluginloader建立返回的是"物件的指標"(物件中有哪些方法可呼叫,就要標頭檔案說了,所以上面的例子中,需要提供乙個介面標頭檔案)

昨天乙個同事說要把乙個類做成dll的形式,但這個類不是從qwidget繼承。 研究了一下,發現qt提供了乙個類qpluginloader可以載入動態鏈結庫。能把乙個普通的類編譯生成dll,通過qpluginloader使用它。

寫乙個例子說明吧:

工程a中,使用了這樣乙個類,專門用來讓算所得稅;

tax.h  

class tax

; tax.cpp

tax::incometax(int income)

main.cpp

int main()

編譯後部署到機器上.

如果計稅方式變了,則incometax()必須改寫了;

tax::incometax(int income)  

標頭檔案沒有變,只是修改了計稅方式,工程a必須重新編譯,然後重新部署; 如果工程a很大或部署的機器很多,代價就大了.

如果讓tax類,單獨編譯成動態鏈結庫,再把tax中的要被使用的介面寫在另乙個標頭檔案中,供工程a使用;每次計稅方式變了,只需修改tax類,然後重新編譯生成動態鏈結庫,然後替換工程a中的相應的動態鏈結庫.而工程a不用重新編譯即可使用新的計稅方式.

新建一工程b,專門用來把tax類做成動態鏈結庫的形式:

//首先定義介面(只要乙個標頭檔案即可)  

tax.h

class tax

; qt_begin_namespace

q_declare_inte***ce(tax,"taxdll/1.0"); //這個巨集用宣告介面

qt_end_namespace

然後從寫乙個具體業務類,繼承上面的介面和qobject,實現介面中定義的方法

taxplugin.h  

class taxplugin:public qobject,tax

; taxplugin.cpp

taxplugin::incometax(int income)

q_export_plugin2(tax, taxplugin); //這個巨集用來匯出動態鏈結庫

編譯工程b,生成tax.dll.

把工程tax.dll和標頭檔案tax.h,拷到工程a中,供工程a使用.

工程a中

int main()  

如果稅率變了,只要修改工程b中的類,然後重新編譯生成tax.dll,替換工程a中原來的庫.而工程a不必重新編譯即可使用新的計稅方式.

深度解析Qt中動態鏈結庫

qlibrary也是用來載入動態鏈結庫,但它建立出來返回的是某個 方法的指標 不需要標頭檔案 而qpluginloader建立返回的是 物件的指標 物件中有哪些方法可呼叫,就要標頭檔案說了,所以上面的例子中,需要提供乙個介面標頭檔案 昨天乙個同事說要把乙個類做成dll的形式,但這個類不是從qwidg...

Qt建立動態鏈結庫

對於自己寫的非常好用的東西如果想拿出來與人分享但是又不想告訴別人原始碼,那麼動態鏈結庫就是乙個非常好的方法。但是怎麼建立自己的動態鏈結庫呢?在qt中我們可以這樣做 新建乙個library c library,輸入庫的名字,選擇工具包,選擇需要的模組,完成。這時我們的工程裡包含了三個檔案,其中以你剛剛...

QT中載入動態鏈結庫

一.新增第三方的標頭檔案 這個問題再簡單不過了,不過我還是要說下。首先,新增標頭檔案 include controlcan.h 然後,再將這個標頭檔案放到工程的目錄下,就ok了,非常的簡單 二.新增.lib檔案 首先,將.lib檔案放到對應的工程目錄下 當然,放到其他路徑也可以 但是,僅僅做這一步是...