日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

两个月后才更新一篇。。。。LIB和DLL的差别

發(fā)布時間:2025/7/14 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 两个月后才更新一篇。。。。LIB和DLL的差别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
兩個月后才更新一篇。。。。LIB和DLL的差別 

共同擁有兩種庫:
一種是LIB包括了函數(shù)所在的DLL文件和文件里函數(shù)位置的信息(入口)。代碼由執(zhí)行時載入在進(jìn)程空間中的DLL提供,稱為動態(tài)鏈接庫dynamic link library。
一種是LIB包括函數(shù)代碼本身。在編譯時直接將代碼增加程序其中,稱為靜態(tài)鏈接庫static link library。
共同擁有兩種鏈接方式:
動態(tài)鏈接使用動態(tài)鏈接庫,同意可運(yùn)行模塊(.dll文件或.exe文件)僅包括在運(yùn)行時定位DLL函數(shù)的可運(yùn)行代碼所需的信息。


靜態(tài)鏈接使用靜態(tài)鏈接庫,鏈接器從靜態(tài)鏈接庫LIB獲取全部被引用函數(shù),并將庫同代碼一起放到可運(yùn)行文件里。

關(guān)于lib和dll的差別例如以下:
(1)lib是編譯時用到的,dll是執(zhí)行時用到的。假設(shè)要完畢源碼的編譯。僅僅須要lib。假設(shè)要使動態(tài)鏈接的程序執(zhí)行起來。僅僅須要dll。


(2)假設(shè)有dll文件,那么lib通常是一些索引信息,記錄了dll中函數(shù)的入口和位置,dll中是函數(shù)的詳細(xì)內(nèi)容;假設(shè)僅僅有l(wèi)ib文件,那么這個lib文件是靜態(tài)編譯出來的。索引和實現(xiàn)都在當(dāng)中。

使用靜態(tài)編譯的lib文件,在執(zhí)行程序時不須要再掛動態(tài)庫。缺點(diǎn)是導(dǎo)致應(yīng)用程序比較大,并且失去了動態(tài)庫的靈活性。公布新版本號時要公布新的應(yīng)用程序才行。
(3)動態(tài)鏈接的情況下,有兩個文件:一個是LIB文件。一個是DLL文件。

LIB包括被DLL導(dǎo)出的函數(shù)名稱和位置。DLL包括實際的函數(shù)和數(shù)據(jù)。應(yīng)用程序使用LIB文件鏈接到DLL文件。在應(yīng)用程序的可運(yùn)行文件里,存放的不是被調(diào)用的函數(shù)代碼。而是DLL中對應(yīng)函數(shù)代碼的地址,從而節(jié)省了內(nèi)存資源。DLL和LIB文件必須隨應(yīng)用程序一起發(fā)行。否則應(yīng)用程序會產(chǎn)生錯誤。假設(shè)不想用lib文件或者沒有l(wèi)ib文件。能夠用WIN32 API函數(shù)LoadLibrary、GetProcAddress裝載。

使用lib需注意兩個文件:
(1).h頭文件,包括lib中說明輸出的類或符號原型或數(shù)據(jù)結(jié)構(gòu)。應(yīng)用程序調(diào)用lib時,須要將該文件包括入應(yīng)用程序的源文件里。
(2).LIB文件,略。

使用dll需注意三個文件:
(1).h頭文件,包括dll中說明輸出的類或符號原型或數(shù)據(jù)結(jié)構(gòu)的.h文件。應(yīng)用程序調(diào)用dll時。須要將該文件包括入應(yīng)用程序的源文件里。


(2).LIB文件。是dll在編譯、鏈接成功之后生成的文件。作用是當(dāng)其它應(yīng)用程序調(diào)用dll時。須要將該文件引入應(yīng)用程序,否則產(chǎn)生錯誤。假設(shè)不想用lib文件或者沒有l(wèi)ib文件。能夠用WIN32 API函數(shù)LoadLibrary、GetProcAddress裝載。


(3).dll文件,真正的可運(yùn)行文件,開發(fā)成功后的應(yīng)用程序在公布時。僅僅須要有.exe文件和.dll文件,并不須要.lib文件和.h頭文件。



使用lib的方法:
靜態(tài)lib中,一個lib文件實際上是隨意個obj文件的集合,obj文件是cpp文件編譯生成的。在編譯這樣的靜態(tài)庫project時,根本不會遇到鏈接錯誤;即使有錯,也僅僅會在使用這個lib的EXT文件或者DLLproject里暴露出來。
在VC中新建一個static library類型的projectLib,增加test.cpp文件和test.h文件(頭文件內(nèi)包含函數(shù)聲明)。然后編譯,就生成了Lib.lib文件。


別的project要使用這個lib有兩種方式:
(1)在project->link->Object/Library Module中增加Lib.lib文件(先查詢工程文件夾。再查詢系統(tǒng)Lib文件夾);或者在源碼中增加指令#pragma comment(lib, “Lib.lib”)。
(2)將Lib.lib拷入project所在文件夾?;蛘哌\(yùn)行文件生成的文件夾,或者系統(tǒng)Lib文件夾中。


(3)增加對應(yīng)的頭文件test.h。

使用DLL的方法:
使用動態(tài)鏈接中的lib,不是obj文件的集合,即里面不會有實際的實現(xiàn),它僅僅是提供動態(tài)鏈接到DLL所須要的信息,這樣的lib能夠在編譯一個DLLproject時由編譯器生成。
創(chuàng)建DLLproject的方法(略)。


(1)隱式鏈接
第一種方法是:通過project->link->Object/Library Module中增加.lib文件(或者在源碼中增加指令#pragma comment(lib, “Lib.lib”)),并將.dll文件置入工程所在文件夾,然后增加相應(yīng)的.h頭文件。

#include?"stdafx.h"
#include?
"DLLSample.h"

#pragma?comment(lib,?
"DLLSample.lib")????//你也能夠在項目屬性中設(shè)置庫的鏈接

int?main()
{
????????TestDLL(
123);???//dll中的函數(shù)。在DllSample.h中聲明
????????return(1);
}

(2)顯式鏈接
須要函數(shù)指針和WIN32 API函數(shù)LoadLibrary、GetProcAddress裝載,使用這樣的加載方法,不須要.lib文件和.h頭文件,僅僅須要.dll文件就可以(將.dll文件置入project文件夾中)。

#include?<iostream>
#include?
<windows.h>?????????//使用函數(shù)和某些特殊變量
typedef?void?(*DLLFunc)(int);
int?main()
{
????????DLLFunc?dllFunc;
????????HINSTANCE?hInstLibrary?
=?LoadLibrary("DLLSample.dll");

????????
if?(hInstLibrary?==?NULL)
????????
{
??????????FreeLibrary(hInstLibrary);
????????}

????????dllFunc?
=?(DLLFunc)GetProcAddress(hInstLibrary,?"TestDLL");
????????
if?(dllFunc?==?NULL)
????????
{
??????????FreeLibrary(hInstLibrary);
????????}

????????dllFunc(
123);
????????std::cin.
get();
????????FreeLibrary(hInstLibrary);
????????
return(1);
}


LoadLibrary函數(shù)利用一個名稱作為參數(shù),獲得DLL的實例(HINSTANCE類型是實例的句柄),通常調(diào)用該函數(shù)后須要查看一下函數(shù)返回是否成功,假設(shè)不成功則返回NULL(句柄無效),此時調(diào)用函數(shù)FreeLibrary釋放DLL獲得的內(nèi)存。


GetProcAddress函數(shù)利用DLL的句柄和函數(shù)的名稱作為參數(shù),返回對應(yīng)的函數(shù)指針。同一時候必須使用強(qiáng)轉(zhuǎn);推斷函數(shù)指針是否為NULL,假設(shè)是則調(diào)用函數(shù)FreeLibrary釋放DLL獲得的內(nèi)存。此后,能夠使用函數(shù)指針來調(diào)用實際的函數(shù)。
最后要記得使用FreeLibrary函數(shù)釋放內(nèi)存。



注意:應(yīng)用程序怎樣找到DLL文件?
使用LoadLibrary顯式鏈接。那么在函數(shù)的參數(shù)中能夠指定DLL文件的完整路徑。假設(shè)不指定路徑,或者進(jìn)行隱式鏈接。Windows將遵循以下的搜索順序來定位DLL:
(1)包括EXE文件的文件夾
(2)project文件夾
(3)Windows系統(tǒng)文件夾
(4)Windows文件夾
(5)列在Path環(huán)境變量中的一系列文件夾

posted on 2017-05-21 21:19 mthoutai 閱讀(...) 評論(...) 編輯 收藏

轉(zhuǎn)載于:https://www.cnblogs.com/mthoutai/p/6886092.html

總結(jié)

以上是生活随笔為你收集整理的两个月后才更新一篇。。。。LIB和DLL的差别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 女人被狂躁60分钟视频 | 国产精品27p | 欧美日韩亚洲国产综合 | 亚洲欧洲日本在线 | 找av导航| 在线免费观看国产 | 久久久久免费精品 | 欧美日韩午夜激情 | 国产自产 | 久久久无码18禁高潮喷水 | 免费成人黄色网址 | 国产一区二区三区在线看 | 91美女片黄在线观看 | 巨乳美女被爆操 | 欧美在线观看免费高清 | 一区二区三区四区免费 | 国产美女精品视频 | 丝袜ol美脚秘书在线播放 | 国产五区 | 亚洲视频在线观看一区 | 欧美精品乱码久久久久久 | 痴女扩张宫交脱垂重口小说 | 国产精品性爱在线 | 久久久久久久91 | 91精品人妻一区二区三区果冻 | 欧美高潮视频 | 久久在线电影 | 毛片99| 国产三级不卡 | 欧美精品久 | 人人搞人人爱 | 2019中文在线观看 | 伊人色在线视频 | 国产一极毛片 | 国产自偷自拍视频 | 国产suv精品一区二区四 | 久久伊人超碰 | 日韩一区二区在线播放 | 欧美黑人孕妇孕交 | 久久久人人人 | 中文字幕在线观 | 人与嘼交av免费 | 天啪 | 亚洲国产av一区二区 | 18p在线观看 | 日韩av在线观看免费 | 亚洲玖玖爱 | 老熟妇仑乱一区二区av | 亚洲色图首页 | 国产真人真事毛片 | 国产麻豆一区二区 | 美女视频久久 | 在线视频福利 | 一区二区三区福利视频 | 国内黄色一级片 | 国产一国产精品一级毛片 | 人人爽人人爱 | 精品人妻在线一区二区三区 | 国产a√精品区二区三区四区 | 欧美乱欲视频 | 日韩三级中文字幕 | youjizz日本人 | 国产视频你懂得 | 欧美 国产 日本 | 丰满圆润老女人hd | 国产日韩视频一区 | 久久成人视屏 | 女生扒开腿让男生操 | 人人妻人人澡人人爽精品欧美一区 | 久久久久久97| 美女写真福利视频 | 一区二区欧美精品 | 影音先锋91 | 国产热| 日韩中文字幕在线看 | 精品黑人一区二区三区在线观看 | 日韩第四页 | 国产网红主播精品av | 日韩av三级在线观看 | 亚洲午夜久久久久久久国产 | 亚洲中国色老太 | 乳罩脱了喂男人吃奶视频 | 国内精品久久久久久久久久久 | 亚洲精品中文字幕乱码三区 | 精品久久久久久一区二区里番 | 邻居少妇张开腿让我爽了在线观看 | 青青草国产在线观看 | 成人毛片18女人毛片免费 | 草草影院第一页 | 国产做a| 香蕉精品在线 | 热の国产 | 蜜桃av在线播放 | 人人夜| 色综合社区 | 国产成人精品网站 | 久久成人激情 | 好吊视频一区 | 97se亚洲综合|