dll和lib:
動態鏈結庫(dll)是乙個可以被其他應用程式共享的程式模組,其中封裝了一些可以被共享的例程和資源。和可執行檔案(exe)非常類似,區別在於dll中雖然包含了可執行**卻不能單獨執行,而應由windows應用程式直接或間接呼叫。
靜態鏈結庫(lib)包含函式**本身,在編譯時直接將**加入程式當中。當多個程式都呼叫相同函式時,記憶體中就會存在這個函式的多個拷貝,這樣就浪費了寶貴的記憶體資源。
使用dll和lib:
使用lib所需檔案
標頭檔案:包含lib中說明輸出的類或符號原型或資料結構。
lib檔案:檔案是靜態編譯出來的,索引和實現都在其中。
靜態編譯的lib檔案有好處:給使用者安裝時不需要再掛動態庫。缺點:導致應用程式比較大,失去動態庫的靈活性,在版本公升級時,同時要發布新的應用程式。
使用dll所需檔案
標頭檔案:包含lib中說明輸出的類或符號原型或資料結構。
lib檔案:包含被dll匯出的函式的名稱和位置。
dll檔案:包含實際的函式和資料。
應用程式使用lib檔案鏈結到所需要使用的dll檔案,庫中的函式和資料並不複製到可執行檔案中,因此在應用程式的可執行檔案中,存放的不是被呼叫的函式**,而是dll中所要呼叫的函式和記憶體位址,這樣當乙個或多個應用程式執行時再把程式**和被呼叫的函式**鏈結起來,從而節省了記憶體資源。
實現方法:
1、在vs2012中建立乙個win32控制台專案mylib。
2、新建libtest.h和libtest.cpp。**如下:
// libtest.h
#ifndef _lib_test_h
#define _lib_test_h
#include class libtest
;#endif // !_lib_test_h
// libtest.cpp
#include "libtest.h"
void libtest::display()
3、選中工程->右鍵->屬性->配置屬性->常規,可以看到專案預設值的配置型別有好幾種型別,選擇靜態庫型別生成lib檔案,選擇動態庫型別生成dll檔案,選擇應用程式生成exe檔案,這裡我們選擇靜態庫。
4、生成解決方案(f7),這時候會生存mylib.lib檔案。
5、新建乙個你要使用mylib.lib的工程uselib。要使用mylib.lib檔案,就得有libtest.h和mylib.lib。在uselib工程中新建兩個資料夾headfile(存放標頭檔案libtest,h)、libfile(存放lib檔案mylib.lib)。
6、配置uselib工程,指向這兩個資料夾。
7、使用
#include "stdafx.h"
#include #include "libtest.h" //標頭檔案
#pragma comment(lib, "mylib.lib") //加入鏈結庫
int _tmain(int argc, _tchar* argv)
控制台輸出結果:
如果想使用dll檔案,那麼就在第3步將型別改為動態庫,這樣會生成lib和dll檔案,將這兩個檔案拷貝到libfile資料夾中即可。
如何使用dll和lib
針對vs2010下的個人理解 一 1 工程目錄 即是 vcxproj 或者 vcxproj.filters 檔案所在的目錄,即你寫的 的位置。2 解決方案目錄 即是 sln 檔案的所在的目錄。3 表示的當前目錄。4 表示當前目錄的前乙個目錄。二 當我們生成乙個dll檔案時,會產生dll檔案和lib檔...
lib和 dll的區別和使用
共有兩種庫 1.一種是lib包含了函式所在的dll檔案和檔案中函式位置的資訊 入口 由執行時載入在程序空間中的dll提供,稱為動態鏈結庫dynamic link library。2.一種是lib包含函式 本身,在編譯時直接將 加入程式當中,稱為靜態鏈結庫static link library。1.動...
有 h和 lib 如何生成DLL
整理自 http social.msdn.microsoft.com forums zh tw 230 thread fdf1dba3 3804 4bb4 95c3 c54758fb3358 q 我有乙份硬體廠商給的sdk,裡面有 x.h 和 x.lib 還有vc6.0的操作範例.不過我目前要是使用...