欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

DLL(Dynamic Linkable Library) 詳解說明

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

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

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

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

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

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

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

正因為DLL 有占用內(nèi)存小,好編輯等的特點有很多電腦病毒都是DLL格式文件。但不能單獨運行。

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

相關文章

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

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

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

    匯編語言無效指令錯誤概述

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

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

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

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

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

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

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

    匯編優(yōu)化提示

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

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

    Java和C#都是一門面向對象的語言,Java更多地借鑒了C++的優(yōu)點,而摒棄了它的一些不太容易被人掌握的知識點(有些不能說是缺點),并且增加了一些自己的特點,而C#則是更多地借鑒了Java的優(yōu)點,而增加了一些自己的特點
    2013-04-04
  • 人人都是開發(fā)者:7款傻瓜式APP開發(fā)工具

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

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

    詳解提升場景文本識別中的語言模型

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

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

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

最新評論