亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

DLL(Dynamic Linkable Library) 詳解說(shuō)明

 更新時(shí)間:2008年12月26日 12:17:07   作者:  
DLL文件(Dynamic Linkable Library 即動(dòng)態(tài)鏈接庫(kù)文件),是一種不能單獨(dú)運(yùn)行的文件,它允許程序共享執(zhí)行特殊任務(wù)所必需的代碼和其他資源
比較大的應(yīng)用程序都由很多模塊組成,這些模塊分別完成相對(duì)獨(dú)立的功能,它們彼此協(xié)作來(lái)完成整個(gè)軟件系統(tǒng)的工作??赡艽嬖谝恍┠K的功能較為通用,在構(gòu)造其它軟件系統(tǒng)時(shí)仍會(huì)被使用。在構(gòu)造軟件系統(tǒng)時(shí),如果將所有模塊的源代碼都靜態(tài)編譯到整個(gè)應(yīng)用程序 EXE 文件中,會(huì)產(chǎn)生一些問(wèn)題:一個(gè)缺點(diǎn)是增加了應(yīng)用程序的大小,它會(huì)占用更多的磁盤空間,程序運(yùn)行時(shí)也會(huì)消耗較大的內(nèi)存空間,造成系統(tǒng)資源的浪費(fèi);另一個(gè)缺點(diǎn)是,在編寫大的 EXE 程序時(shí),在每次修改重建時(shí)都必須調(diào)整編譯所有源代碼,增加了編譯過(guò)程的復(fù)雜性,也不利于階段性的單元測(cè)試。

Windows 系統(tǒng)平臺(tái)上提供了一種完全不同的較有效的編程和運(yùn)行環(huán)境,你可以將獨(dú)立的程序模塊創(chuàng)建為較小的 DLL 文件,并可對(duì)它們單獨(dú)編譯和測(cè)試。在運(yùn)行時(shí),只有當(dāng) EXE 程序確實(shí)要調(diào)用這些 DLL 模塊的情況下,系統(tǒng)才會(huì)將它們裝載到內(nèi)存空間中。這種方式不僅減少了 EXE 文件的大小和對(duì)內(nèi)存空間的需求,而且使這些 DLL 模塊可以同時(shí)被多個(gè)應(yīng)用程序使用。Windows 自己就將一些主要的系統(tǒng)功能以 DLL 模塊的形式實(shí)現(xiàn)。

一般來(lái)說(shuō),DLL 是一種磁盤文件,以.dll、.DRV、.FON、.SYS 和許多以 .EXE 為擴(kuò)展名的系統(tǒng)文件都可以是 DLL。它由全局?jǐn)?shù)據(jù)、服務(wù)函數(shù)和資源組成,在運(yùn)行時(shí)被系統(tǒng)加載到調(diào)用進(jìn)程的虛擬空間中,成為調(diào)用進(jìn)程的一部分。如果與其它 DLL 之間沒(méi)有沖突,該文件通常映射到進(jìn)程虛擬空間的同一地址上。DLL 模塊中包含各種導(dǎo)出函數(shù),用于向外界提供服務(wù)。DLL 可以有自己的數(shù)據(jù)段,但沒(méi)有自己的堆棧,使用與調(diào)用它的應(yīng)用程序相同的堆棧模式;一個(gè) DLL 在內(nèi)存中只有一個(gè)實(shí)例;DLL 實(shí)現(xiàn)了代碼封裝性;DLL 的編制與具體的編程語(yǔ)言及編譯器無(wú)關(guān)。

在 Win32 環(huán)境中,每個(gè)進(jìn)程都復(fù)制了自己的讀/寫全局變量。如果想要與其它進(jìn)程共享內(nèi)存,必須使用內(nèi)存映射文件或者聲明一個(gè)共享數(shù)據(jù)段。DLL 模塊需要的堆棧內(nèi)存都是從運(yùn)行進(jìn)程的堆棧中分配出來(lái)的。Windows 在加載 DLL 模塊時(shí)將進(jìn)程函數(shù)調(diào)用與 DLL 文件的導(dǎo)出函數(shù)相匹配。Windows 操作系統(tǒng)對(duì) DLL 的操作僅僅是把 DLL 映射到需要它的進(jìn)程的虛擬地址空間里去。DLL 函數(shù)中的代碼所創(chuàng)建的任何對(duì)象(包括變量)都?xì)w調(diào)用它的線程或進(jìn)程所有。

調(diào)用方式:
1、靜態(tài)調(diào)用方式:由編譯系統(tǒng)完成對(duì) DLL 的加載和應(yīng)用程序結(jié)束時(shí) DLL 卸載的編碼(如還有其它程序使用該 DLL,則 Windows 對(duì) DLL 的應(yīng)用記錄減1,直到所有相關(guān)程序都結(jié)束對(duì)該 DLL 的使用時(shí)才釋放它,簡(jiǎn)單實(shí)用,但不夠靈活,只能滿足一般要求。
隱式的調(diào)用:需要把產(chǎn)生動(dòng)態(tài)連接庫(kù)時(shí)產(chǎn)生的 .LIB 文件加入到應(yīng)用程序的工程中,想使用 DLL 中的函數(shù)時(shí),只須說(shuō)明一下。隱式調(diào)用不需要調(diào)用 LoadLibrary() 和 FreeLibrary()。程序員在建立一個(gè) DLL 文件時(shí),鏈接程序會(huì)自動(dòng)生成一個(gè)與之對(duì)應(yīng)的 LIB 導(dǎo)入文件。該文件包含了每一個(gè) DLL 導(dǎo)出函數(shù)的符號(hào)名和可選的標(biāo)識(shí)號(hào),但是并不含有實(shí)際的代碼。LIB 文件作為 DLL 的替代文件被編譯到應(yīng)用程序項(xiàng)目中。
當(dāng)程序員通過(guò)靜態(tài)鏈接方式編譯生成應(yīng)用程序時(shí),應(yīng)用程序中的調(diào)用函數(shù)與 LIB 文件中導(dǎo)出符號(hào)相匹配,這些符號(hào)或標(biāo)識(shí)號(hào)進(jìn)入到生成的 EXE 文件中。LIB 文件中也包含了對(duì)應(yīng)的 DL L文件名(但不是完全的路徑名),鏈接程序?qū)⑵浯鎯?chǔ)在 EXE 文件內(nèi)部。
當(dāng)應(yīng)用程序運(yùn)行過(guò)程中需要加載 DLL 文件時(shí),Windows 根據(jù)這些信息發(fā)現(xiàn)并加載 DLL,然后通過(guò)符號(hào)名或標(biāo)識(shí)號(hào)實(shí)現(xiàn)對(duì) DLL 函數(shù)的動(dòng)態(tài)鏈接。所有被應(yīng)用程序調(diào)用的 DLL 文件都會(huì)在應(yīng)用程序 EXE 文件加載時(shí)被加載在到內(nèi)存中??蓤?zhí)行程序鏈接到一個(gè)包含 DLL 輸出函數(shù)信息的輸入庫(kù)文件(.LIB文件)。操作系統(tǒng)在加載使用可執(zhí)行程序時(shí)加載 DLL??蓤?zhí)行程序直接通過(guò)函數(shù)名調(diào)用 DLL 的輸出函數(shù),調(diào)用方法和程序內(nèi)部其 它的函數(shù)是一樣的。

2、動(dòng)態(tài)調(diào)用方式:是由編程者用 API 函數(shù)加載和卸載 DLL 來(lái)達(dá)到調(diào)用 DLL 的目的,使用上較復(fù)雜,但能更加有效地使用內(nèi)存,是編制大型應(yīng)用程序時(shí)的重要方式。

顯式的調(diào)用:
是指在應(yīng)用程序中用 LoadLibrary 或 MFC 提供的 AfxLoadLibrary 顯式的將自己所做的動(dòng)態(tài)連接庫(kù)調(diào)進(jìn)來(lái),動(dòng)態(tài)連接庫(kù)的文件名即是上面兩個(gè)函數(shù)的參數(shù),再用 GetProcAddress() 獲取想要引入的函數(shù)。自此,你就可以象使用如同本應(yīng)用程序自定義的函數(shù)一樣來(lái)調(diào)用此引入函數(shù)了。在應(yīng)用程序退出之前,應(yīng)該用 FreeLibrary 或 MFC 提供的 AfxFreeLibrary 釋放動(dòng)態(tài)連接庫(kù)。直接調(diào)用 Win32 的 LoadLibary 函數(shù),并指定 DLL 的路徑作為參數(shù)。LoadLibary 返回 HINSTANCE 參數(shù),應(yīng)用程序在調(diào)用 GetProcAddress 函數(shù)時(shí)使用這一參數(shù)。GetProcAddress 函數(shù)將符號(hào)名或標(biāo)識(shí)號(hào)轉(zhuǎn)換為 DLL 內(nèi)部的地址。程序員可以決定 DLL 文件何時(shí)加載或不加載,顯式鏈接在運(yùn)行時(shí)決定加載哪個(gè) DLL 文件。使用 DLL 的程序在使用之前必須加載(LoadLibrary)加載DLL從而得到一個(gè)DLL模塊的句柄,然后調(diào)用 GetProcAddress 函數(shù)得到輸出函數(shù)的指針,在退出之前必須卸載DLL(FreeLibrary)。

正因?yàn)镈LL 有占用內(nèi)存小,好編輯等的特點(diǎn)有很多電腦病毒都是DLL格式文件。但不能單獨(dú)運(yùn)行。

動(dòng)態(tài)鏈接庫(kù)通常都不能直接運(yùn)行,也不能接收消息。它們是一些獨(dú)立的文件,其中包含能被可執(zhí)行程序或其它DLL調(diào)用來(lái)完成某項(xiàng)工作的函數(shù)。只有在其它模塊調(diào)用動(dòng)態(tài)鏈接庫(kù)中的函數(shù)時(shí),它才發(fā)揮作用。

相關(guān)文章

  • 詳解windows 環(huán)境下搭建electricSearch+kibana

    詳解windows 環(huán)境下搭建electricSearch+kibana

    這篇文章主要介紹了windows 環(huán)境下搭建electricSearch+kibana,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • 匯編語(yǔ)言無(wú)效指令錯(cuò)誤概述

    匯編語(yǔ)言無(wú)效指令錯(cuò)誤概述

    此錯(cuò)誤僅適用于奔騰 處理器、奔騰處理器與MMX技術(shù)、奔騰OverDrive處理器 和奔騰OverDrive處理器帶有MMX技術(shù)。 奔騰Pro處理器, 奔騰II處理器和i486及更早版本處理器不受影響
    2012-07-07
  • git merge --ff/--no-ff/--ff-only 三種選項(xiàng)參數(shù)的區(qū)別解析

    git merge --ff/--no-ff/--ff-only 三種選項(xiàng)參數(shù)的區(qū)別解析

    這篇文章主要介紹了git merge --ff/--no-ff/--ff-only 三種選項(xiàng)參數(shù)的區(qū)別解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Hbuilder配置Avalon和Vue指令提示的方法詳解

    Hbuilder配置Avalon和Vue指令提示的方法詳解

    HBuilder是DCloud(數(shù)字天堂)推出的一款支持HTML5的Web開(kāi)發(fā)IDE,下面這篇文章主要給大家介紹了關(guān)于Hbuilder如何配置Avalon和Vue指令提示的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-10-10
  • 如何理解軟件系統(tǒng)的高并發(fā)

    如何理解軟件系統(tǒng)的高并發(fā)

    本文介紹高并發(fā)系統(tǒng)的度量指標(biāo),講述高并發(fā)系統(tǒng)的設(shè)計(jì)思路,再梳理高并發(fā)的關(guān)鍵技術(shù),最后結(jié)合作者的經(jīng)驗(yàn)做一些延伸探討。
    2021-05-05
  • 匯編優(yōu)化提示

    匯編優(yōu)化提示

    暑假瞄了一些匯編優(yōu)化的文章,感覺(jué)這篇有點(diǎn)意思。盡管英文水平不咋地,還是倔起牛勁翻譯了下??隙ㄓ胁缓玫牡胤剑蠹液:瓇英文原文附件給出~如果有什么錯(cuò)誤還望批評(píng)指正~另外,如果admin感覺(jué)可以加精的話就麻煩下了
    2012-07-07
  • java與c#的區(qū)別、兩者有什么不同?

    java與c#的區(qū)別、兩者有什么不同?

    Java和C#都是一門面向?qū)ο蟮恼Z(yǔ)言,Java更多地借鑒了C++的優(yōu)點(diǎn),而摒棄了它的一些不太容易被人掌握的知識(shí)點(diǎn)(有些不能說(shuō)是缺點(diǎn)),并且增加了一些自己的特點(diǎn),而C#則是更多地借鑒了Java的優(yōu)點(diǎn),而增加了一些自己的特點(diǎn)
    2013-04-04
  • 人人都是開(kāi)發(fā)者:7款傻瓜式APP開(kāi)發(fā)工具

    人人都是開(kāi)發(fā)者:7款傻瓜式APP開(kāi)發(fā)工具

    國(guó)外的營(yíng)銷工作者和技術(shù)開(kāi)發(fā)者開(kāi)發(fā)了許多能幫助企業(yè)創(chuàng)建簡(jiǎn)單APP應(yīng)用的工具,通過(guò)這些工具,就算是一個(gè)對(duì)程序一竅不通的普通網(wǎng)民都可以很容易的創(chuàng)建一個(gè)企業(yè)的APP程序,并可以對(duì)程序進(jìn)行應(yīng)用更新維護(hù),開(kāi)展?fàn)I銷等活動(dòng)
    2013-11-11
  • 詳解提升場(chǎng)景文本識(shí)別中的語(yǔ)言模型

    詳解提升場(chǎng)景文本識(shí)別中的語(yǔ)言模型

    語(yǔ)言模型即根據(jù)當(dāng)前語(yǔ)境的上下文推斷當(dāng)前句子的意思。文本圖像中包含兩層信息:視覺(jué)紋理信息和語(yǔ)言信息。由于單純根據(jù)視覺(jué)紋理信息進(jìn)行文字識(shí)別缺少了對(duì)上下文的字符語(yǔ)義信息的挖掘,時(shí)常會(huì)導(dǎo)致錯(cuò)誤的文本識(shí)別結(jié)果(之后會(huì)詳細(xì)說(shuō)明)。
    2021-05-05
  • 微信支付jsapi缺少參數(shù) total_fee 錯(cuò)誤分析與解決方法

    微信支付jsapi缺少參數(shù) total_fee 錯(cuò)誤分析與解決方法

    這篇文章主要介紹了微信支付jsapi缺少參數(shù) total_fee 錯(cuò)誤分析與解決方法,需要的朋友可以參考下
    2018-03-03

最新評(píng)論