一、建立共享庫
1、新其他建專案,選擇
c++庫
2、選擇共享庫,並取專案名稱,單擊下一步。這裡取名位mylib
3、按預設配置單擊下一步至模組選項,選擇所需支援的模組。這裡勾選qtcore
和qtgui。
4、直接下一步至完成。現在乙個共享庫的工程就新建好了。
5、右擊專案新增新檔案,選擇qt
設計師介面,以便支援視覺化介面設計。
6、進入視覺化介面設計,修改objectname
為mylib
7、修改mylib.h
檔案,**如下:
8、修改mylib.cpp#ifndef mylib_h
#define mylib_h
#include "mylib_global.h"
#include namespace ui
class mylibshared_export mylib :public qdialog
;#endif // mylib_h
檔案,**如下:
9、右鍵單擊專案,選擇構建專案"mylib"#include "mylib.h"
#include "ui_mylib.h"
mylib::mylib(qwidget *parent):
qdialog(parent),
ui(new ui::mylib)
。如果沒有錯誤,構建成功後會在
debug
資料夾下出現這三個檔案。
mylib.dll即為後面要使用到的共享庫,
libmylib.a
是linux
下使用的庫。
至此,已生成了要使用的共享庫。
二、共享庫的使用
現在需要新建乙個工程來呼叫我們剛才生成的共享庫。這裡我建立了乙個名為libtest
的dialog
工程。
1、修改工程檔案libtest.pro
,在檔案尾新增如下**:
[cpp]view plain
copy
?
includepath += ../
libs += ../debug/lib.dll
includepath 這一行就是為了讓我們的includepath += ../
libs += ../debug/lib.dll
libtest
專案可以找到
mylib.h
和mylib_global.h
這兩個檔案,你需要把這裡的路徑替換成符合你的工程的路徑。
libs 這一行則需要告訴編譯器(注意,這裡是編譯器!)到**去找到這個 dll
檔案。
這裡,我的路徑為:
[cpp]view plain
copy
?
includepath += i:\qt\myprojects\mylib
libs += i:\qt\myprojects\mylib\debug\mylib.dll
2、在dialogincludepath += i:\qt\myprojects\mylib
libs += i:\qt\myprojects\mylib\debug\mylib.dll
中新增乙個
button
,單擊button
時呼叫共享庫。修改
dialog.cpp
檔案,**如下:
3、此時執行一下,會是什麼效果呢?什麼都沒有!提示#include "dialog.h"
#include "ui_dialog.h"
#include "mylib.h"
dialog::dialog(qwidget *parent) :
qdialog(parent),
ui(new ui::dialog)
dialog::~dialog()
void dialog::on_pushbutton_clicked()
[cpp]view plain
copy
?
i:\qt\myprojects\libtest\debug\libtest.exe 啟動中...
i:\qt\myprojects\libtest\debug\libtest.exe 退出, **: -1073741515
找到libtesti:\qt\myprojects\libtest\debug\libtest.exe 啟動中...
i:\qt\myprojects\libtest\debug\libtest.exe 退出, **: -1073741515
工程目錄下的
libtest.exe
,雙擊執行,彈出
沒有找到mylib.dll?不是使用 libs
指定了嗎?請注意,我們強調了,這個指定是編譯期的。
dll是動態鏈結庫,也就是說,在
exe執行的時候需要找到這個庫。執行時查詢的順序是:當前路徑
->
系統路徑
(通常是
system32)
。所以,要把我們先前生成的這個mylib.dll複製到
exe所在目錄,然後直接雙擊一下這個
exe檔案。程式執行如下
單擊mylib test按鈕,共享庫
mylib
的dialog
也彈出來啦
~~~
到這裡,共享庫的使用也成功了。
三、更新dll
也許有人要問了,共享庫的建立和使用都這麼麻煩,用它有什麼好處呢。
共享庫的乙個好處是可以動態載入,也就是說,如果你需要公升級程式,那麼就要簡單的替換掉這個 dll
就好了,不需要要求使用者重新安裝全部檔案。當然,這些
dll也是有缺點的:動態載入的東西肯定會比靜態編譯的東西效率低一些。不過在現在的硬體環境下,這點效能損失已經可以忽略不計了。
好,那麼我們現在來體驗一下如何更新dll
來達到公升級程式的目的。
1、修改mylib.cpp
,在共享庫的
dialog
中新增乙個
button。
2、右鍵單擊專案mylib
,選擇重新構建專案
"mylib"
3、將libtest
專案目錄下的
mylib.dll
替換新的
mylib.dll。
4、執行libtest.exe
這時單擊mylib test按鈕,效果如何呢?
至此,我們在沒有修改程式的情況下,通過替換dll達到了改變程式執行效果的目的。也就是說我們可以通過更新dll檔案來完成對程式的公升級了。
原文出處:
建立和使用動態鏈結庫
在本演練中,您將建立乙個動態鏈結庫 dll 其中包含可供其他應用程式使用的有用例程。使用 dll 是一種重用 的絕佳方式。您不必在自己建立的每個程式中重新實現這些例程,而只需對這些例程編寫一次,然後從需要該功能的應用程式引用它們即可。本演練使用本機 c 有關使用本機 c 建立靜態庫的演練,請參見 演...
建立和使用動態鏈結庫 C
我們將建立的第一種型別的庫是動態鏈結庫 dll 使用 dll 是一種重用 的絕佳方式。您不必在自己建立的每個程式中重新實現同一例程,而只需對這些例程編寫一次,然後從需要該功能的應用程式引用它們即可。本演練涵蓋以下內容 本主題假定您具備 c 語言的基礎知識。從 檔案 選單中,選擇 新建 然後選擇 專案...
動態鏈結庫DLL建立和使用
到目前為止剛剛開始接觸dll dynamic link library 一邊看書,一邊建立了乙個dll檔案,然後進行了dll檔案的使用,具體操作以及 如下 1 createdll工程的建立,工程型別為win32下的dll型別 生成的程式入口函式為 bool apientry dllmain hmod...