1. LIB里定義的是DLL里的接口。
2. LIB的東西將會放到EXE文件中,DLL則不會。
3. lib只是一種二進制文件,記錄的是dll中所導出的函數的信息,用于當你在應用中使用靜態加載dll庫時(即不通過LoadLibrary和
GetProcAddress來加載并使用函數),連接器能夠定位使用了該lib庫所對應的dll中的相應函數,如果連接器無法定位,則連接器就會報錯。
4. 動態鏈接庫(DLL)由可執行模塊組成,為進程提供數據、代碼和資源。編譯時使用的靜態鏈接庫不同的是,動態鏈接庫獨立于激活它們的可執行文件,調用的地址轉換是在加載 時解決的。這使DLL的故障查找和小的修改比較簡單,不必重新編譯調用它們的可執行模塊。
5. lib在靜態連接時使用,形象一點,可以看成一種"頭文件".相應的dll可以看成"實現文件(二進制級別)".如果動態連接時不需要lib.
6. 顯式調用與隱式調用:在進行隱式調用的時候需要在客戶端引入頭文件,并在鏈接時指明dll對應的lib文件(dll只要有函數輸出,則鏈接的時候會產生一個與dll同名的
lib文件)位置和名稱。然后如同調用api函數庫中的函數一樣調用dll中的函數,不需要顯式的LoadLibrary和
GetProcAddress。使用最為方便。
7. VC開發的dll,已有.h .dll .lib文件。dll里面有很多類。如何在Qt中導出dll中的類,然后使用dll中類提供的方法?網上很多資料都是用QLibrary 去load dll, 然后去解析具體函數,但這些例子的dll里沒有封裝類。
只要是標準DLL,用隱式鏈接不就行了么,dll文件有沒有提供入口的lib(一個很小的靜態庫),如果沒有就只能顯示連接了
一、開發和使用DLL需注意三種文件
1、 DLL頭文件(.H)
它是指DLL中說明輸出的類或符號(Symbols)原型或數據結構的.H文件。當其它應用程序調用DLL時,需要將該文件包含入應用程序的源文件中。
2、 DLL的引入庫文件(.LIB)
它是DLL在編譯、鏈接成功后生成的文件。主要作用是當其它應用程序調用DLL時,需要將該文件引入應用程序。否則,DLL無法引入。
3、 DLL文件(.DLL)
它是應用程序調用DLL運行時,真正的可執行文件。DLL應用在編譯、鏈接成功后,.DLL文件即存在。開發成功后的應用程序在發布時,只需要有.EXE文件和.DLL文件,不必有.LIB文件和DLL頭文件。