前以lib後綴的庫有兩種,一種爲靜態連接庫(Static Libary,如下簡稱「靜態庫」),另外一種爲動態鏈接庫(DLL,如下簡稱「動態庫」)的導入庫(Import Libary,如下簡稱「導入庫」)。
靜態庫是一個或者多個obj文件的打包,因此有人乾脆把從obj文件生成lib的過程稱爲Archive,即合併到一塊兒。好比你連接一個靜態庫,若是其中有錯,它會準確的找到是哪一個obj有錯,即靜態lib只是殼子。
動態庫通常會有對應的導入庫,方便程序靜態載入動態連接庫,不然你可能就須要本身LoadLibary調入DLL文件,而後再手工GetProcAddress得到對應函數了。有了導入庫,你只須要連接導入庫後按照頭文件函數接口的聲明調用函數就能夠了。
導入庫和靜態庫的區別很大,他們實質是不同的東西。靜態庫自己就包含了實際執行代碼、符號表等等,而對於導入庫而言,其實際的執行代碼位於動態庫中,導入庫只包含了地址符號表等,確保程序找到對應函數的一些基本地址信息。
這也是實際上不少開源代碼發佈的慣用方式:
1. 預編譯的開發包:包含一些.dll文件和一些.lib文件。其中這裏的.lib就是導入庫,而不要錯覺得是靜態庫。可是引入方式和靜態庫同樣,要在連接路徑上添加找到這些.lib的路徑。而.dll則最好放到最後產生的應用程序exe執行文件相同的目錄。這樣運行時,就會自動調入動態連接庫。
2. 用戶本身編譯: 下載的是源代碼,按照readme本身編譯。生成極可能也是.dll + .lib(導入庫)的庫文件
3. 若是你只有dll,而且你知道dll中函數的函數原型,那麼你能夠直接在本身程序中使用LoadLibary調入DLL文件,GetProcAddress
DLL:
動態連接庫 (DLL) 是做爲共享函數庫的可執行文件。動態連接提供了一種方法,使進程能夠調用不屬於其可執行代碼的函數。函數的可執行代碼位於一個 DLL 中,該 DLL 包含一個或多個已被編譯、連接並與使用它們的進程分開存儲的函數。DLL 還有助於共享數據和資源。多個應用程序可同時訪問內存中單個 DLL 副本的內容。
動態連接與靜態連接的不一樣之處在於它容許可執行模塊(.dll 文件或 .exe 文件)僅包含在運行時定位 DLL 函數的可執行代碼所需的信息。在靜態連接中,連接器從靜態連接庫獲取全部被引用的函數,並將庫同代碼一塊兒放到可執行文件中。
使用動態連接代替靜態連接有若干優勢。DLL 節省內存,減小交換操做,節省磁盤空間,更易於升級,提供售後支持,提供擴展 MFC 庫類的機制,支持多語言程序,並使國際版本的建立輕鬆完成。
API 就是應用程序編程接口。它是能用來操做組件、應用程序或者操做系統的一組函數。典型的狀況下,API 由一個或多個提供某種特殊功能的 DLL 組成。
DLL 是一個文件,其中包含了在 Microsoft? Windows? 下運行的任何應用程序均可調用的函數。運行時,DLL 中的函數動態地連接到調用它的應用程序中。不管有多少應用程序調用 DLL 中的某個函數,在磁盤上只有一個文件包含該函數,且只在它調入內存時才建立該 DLL。
您聽到最多的 API 多是 Windows API,它包括構成 Windows 操做系統的各類 DLL。每一個 Windows 應用程序都直接或間接地與 Windows API 互動。Windows API 保證 Windows 下運行的全部應用程序的行爲方式一致。
注意 隨着 Windows 操做系統的發展,現已發佈了幾個版本的 Windows API。Windows 3.1 使用 Win16 API。Microsoft? Windows NT?、Windows 95 和 Windows 98 平臺使用 Microsoft? Win32? API。
除 Windows API 外,其餘一些 API 也已發佈。例如,郵件應用程序編程接口 (MAPI) 是一組可用於編寫電子郵件應用程序的 DLL。
API 傳統上是爲開發 Windows 應用程序的 C 和 C++ 程序員編寫的,但其餘的編程語言(包括VBA)也能夠調用 DLL 中的函數。由於大部分 DLL 主要是爲 C 和 C++ 程序員編寫和整理說明的,因此調用 DLL 函數的方法與調用 VBA 函數會有所不一樣。在使用 API 時必須瞭解如何給 DLL 函數傳遞參數。
警告 調用 Windows API 和 其餘 DLL 函數可能會給您的應用程序帶來不良影響。從本身的代碼中直接調用 DLL 函數時,您繞過了 VBA 一般提供的一些安全機制。若是在定義或調用 DLL 函數時出現錯誤(全部程序員都不可避免),可能會在應用程序中引發應用程序錯誤(也稱爲通用性保護錯誤,或 GPF)。最好的解決辦法是在運行代碼之前保存該項目,並確保瞭解 DLL 函數調用的原理。
LIB 建立標準庫、導入庫和導出文件,在生成 32 位程序時可將它們與 LINK 一塊兒使用。LIB 從命令提示運行。
可在下列幾種模式下使用 LIB:
生成或修改 COFF 庫
將成員對象提取到文件中
建立導出文件和導入庫
這些模式是互斥的;每次只能以一種模式使用 LIB。程序員
http://tieba.baidu.com/p/549424016編程