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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows 动态链接库DLL浅解

發布時間:2025/3/20 windows 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows 动态链接库DLL浅解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

動態鏈接庫(DLL),即:Dynamic Link Library。一個包含可由多個程序同時使用的代碼和數據的庫,DLL不是可執行文件。

設計動態鏈接庫初衷是為了節約應用程序的磁盤和內存空間。在之前傳統非共享庫中,一個代碼段簡單的附加到程序中,如果另一個程序同時需要調用該代碼段時,則會在內存中出現兩個相同的代碼段。動態鏈接庫在內存中只有一個實例。

DLL與LIB的關系

咋一看:lib是靜態鏈接庫;DLL是動態鏈接庫,一個編譯時提供;一個運行時提供,完了。

其實沒那么簡單! lib也有靜態lib和動態lib之分。

靜態lib:它將導出聲明和實現均放到lib中,編譯后所有代碼都嵌入到宿主程序中去。

動態lib:相當于一個h文件,它是對實現部分(.DLL)的導出部分的聲明。編譯后只是將導出聲明部分編譯到宿主程序中,運行時需要相應的DLL文件的支持,否則無法工作。當生成一個新的DLL時,也會有配套的lib產生(即二者需一起分發),此時的lib即為動態lib。

上文引自:http://blog.csdn.net/heyabo/article/details/8721611

?使用動態dll有兩種方法,一種是隱式鏈接,一種顯示鏈接,如果用loadlibrary就是顯示鏈接,用lib就屬于隱式鏈接

dll是個編譯好的程序,調用時可以直接調用其中的函數,?不參加工程的編譯。
而lib應該說是一個程序集,?只是把一些相應的函數總結在一起,?如果調用lib中的函數,?在工程編譯時,這些調用的函數都將參加編譯。
簡單講,靜態庫就是直接將需要的代碼連接進可執行程序;動態庫就是在需要調用其中的函數時,根據函數映射表找到該函數然后調入堆棧執行。 ??
做成靜態庫可執行文件本身比較大,但不必附帶動態庫 ??
做成動態庫可執行文件本身比較小,但需要附帶動態庫

?實例

1.通過Loadlibrary顯式調用DLL

a.新建工程,生成動態庫DLL;(我們發現在生成動態庫DLL的同時會生成一個同名的Lib)

//MyDll.h extern "C" __declspec (dllexport) int Add(int a,int b); //將Add作為導出函數//MyDll.cpp int Add(int a,int b) {return a+b; }

b.通過主函數調用

//Main.cpp #include <stdio.h> __declspec(dllimport) int Add(int ,int );typedef int (*pAdd)(int ,int); int _tmain(int argc, _TCHAR* argv[]) {HINSTANCE hDll;pAdd Add;hDll=LoadLibrary("MyDll.dll");if (hDll){Add=(pAdd)GetProcAddress(hDll,"Add");}printf("a+b=%d\n",Add(10,15));return 0; }

運行結果:

2.通過Lib隱式調用DLL(*.h+*.lib+*.dll)

a.將MyDll.h、MyDll.lib和MyDll.dll拷貝至Main工程中;

b.將MyDll.h添加至Main工程;

c.將MyDll.lib添加至Main工程的“附加依賴項”中;

d.在Main中調用Add。

//Main.pp #include <stdio.h>int _tmain(int argc, _TCHAR* argv[]) {printf("a+b=%d\n",Add(10,15));return 0; }

e.刪除Main工程中的MyDll.dll,再次編譯鏈接Main工程。編譯鏈接均成功,單運行時會有如下提示:

3.直接調用靜態庫

?將MyDll工程設置為生成靜態庫Lib,通過布置2中的方法調用Add函數,不需要MyDll.dll能運行成功。

?

轉載于:https://my.oschina.net/871120/blog/295219

總結

以上是生活随笔為你收集整理的Windows 动态链接库DLL浅解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。