『壹』 後綴為dll的資料庫文件怎樣解讀(dll文件改成啥後綴能刪除)
後綴為dll的資料庫文件為動態鏈接庫,要載入到軟體上才能用。
附:DLL文件(DynamicLinkableLibrary即動態鏈接庫文件),是一種不能單獨運行的文件,它允許程序共享執行特殊任務所必需的代碼和其他資源
比較大的應用程序都由很多模塊組成,這些模塊分別完成相對獨立的功能,它們彼此協作來完成整個軟體系統的工作。可能存在一些模塊的功能較為通用,在構造其它軟體系統時仍會被使用。在構造軟體系統時,如果將所有模塊的源代碼都靜態編譯到整個應用程序EXE文件中,會產生一些問題:一個缺點是增加了應用程序的大小,它會佔用更多的磁碟空間,程序運行時也會消耗較大的內存空間,造成系統資源的浪費;另一個缺點是,在編寫大的EXE程序時,在每次修改重建時都必須調整編譯所有源代碼,增加了編譯過程的復雜性,也不游纖利於階段性的單元測試。
Windows系統平台上提供了一種完全不同的較有效的編程和運行環境,你可以將獨立的程序模塊創建為較小的DLL文件,並可對它們單獨編譯和測試。在運行時,只有當EXE程序確實要調用這些DLL模塊的情況下,系統才會將它們裝載到內存空間中。這種方式不僅減少了EXE文件的大小和對內存空間的需求,而且使這些DLL模塊可以同時被多個應用程序使用。Windows自己就將一些主要的系統功能以DLL模塊的形式實現。
一般來說,DLL是一種磁碟文件,以.dll、.DRV、.FON、.SYS和許多以.EXE為擴展名的系統文件都可以是DLL。它由全局數據、服務函數和資源組成,在運行時被系統載入到調用進程的虛擬空間中,成為調用進程的一部分。如果與其它DLL之間沒有沖突,該文件通常映射到進程虛擬空間的同一地址上。DLL模塊中包含各種導出函數,用於向外界提供服務。DLL可以有自己的數據段,但沒有自己的堆棧,使用與調用它的應用程序相同的堆棧模式;一個DLL在內存中只有一個實例;DLL實現了代碼封裝性;DLL的編制與具體的編程語言及編譯器無關。
在Win32環境中,每個進程都復制了自己的讀/寫全局變數。如果想要與其它進程共享內存,必須使用內存映射文件或者聲明一個共享數據段。DLL模塊需要的堆棧內存都是從運行進程的堆棧中分配出來的。Windows在載入DLL模塊時將進程函數調用與DLL文件的導出函數相匹配。Windows操作系統對DLL的操作僅僅是把DLL映射到需要它的進程的虛擬地址空間里去。DLL函數中的代碼所創建的任何對象(包括變數)都歸調用它的線程或進程所有。
調用方式:
1、靜態調用方式:由編譯系統完成對DLL的載入和應用程序結束時DLL卸載的編碼(如還有其它程序使用大灶該DLL,則Windows對DLL的應用記錄減1,直到所有相關程序都結束對該DLL的使用時才釋放它,簡單實用,但不夠靈活,只能滿足一滾磨扮般要求。
隱式的調用:需要把產生動態連接庫時產生的.LIB文件加入到應用程序的工程中,想使用DLL中的函數時,只須說明一下。隱式調用不需要調用LoadLibrary()和FreeLibrary()。程序員在建立一個DLL文件時,鏈接程序會自動生成一個與之對應的LIB導入文件。該文件包含了每一個DLL導出函數的符號名和可選的標識號,但是並不含有實際的代碼。LIB文件作為DLL的替代文件被編譯到應用程序項目中。
當程序員通過靜態鏈接方式編譯生成應用程序時,應用程序中的調用函數與LIB文件中導出符號相匹配,這些符號或標識號進入到生成的EXE文件中。LIB文件中也包含了對應的DLL文件名(但不是完全的路徑名),鏈接程序將其存儲在EXE文件內部。
當應用程序運行過程中需要載入DLL文件時,Windows根據這些信息發現並載入DLL,然後通過符號名或標識號實現對DLL函數的動態鏈接。所有被應用程序調用的DLL文件都會在應用程序EXE文件載入時被載入在到內存中。可執行程序鏈接到一個包含DLL輸出函數信息的輸入庫文件(.LIB文件)。操作系統在載入使用可執行程序時載入DLL。可執行程序直接通過函數名調用DLL的輸出函數,調用方法和程序內部其它的函數是一樣的。
2、動態調用方式:是由編程者用API函數載入和卸載DLL來達到調用DLL的目的,使用上較復雜,但能更加有效地使用內存,是編制大型應用程序時的重要方式。
顯式的調用:
是指在應用程序中用LoadLibrary或MFC提供的顯式的將自己所做的動態連接庫調進來,動態連接庫的文件名即是上面兩個函數的參數,再用()獲取想要引入的函數。自此,你就可以象使用如同本應用程序自定義的函數一樣來調用此引入函數了。在應用程序退出之前,應該用FreeLibrary或MFC提供的釋放動態連接庫。直接調用Win32的LoadLibary函數,並指定DLL的路徑作為參數。LoadLibary返回HINSTANCE參數,應用程序在調用函數時使用這一參數。函數將符號名或標識號轉換為DLL內部的地址。程序員可以決定DLL文件何時載入或不載入,顯式鏈接在運行時決定載入哪個DLL文件。使用DLL的程序在使用之前必須載入(LoadLibrary)載入DLL從而得到一個DLL模塊的句柄,然後調用函數得到輸出函數的指針,在退出之前必須卸載DLL(FreeLibrary)。
正因為DLL有佔用內存小,好編輯等的特點有很多電腦病毒都是DLL格式文件。但不能單獨運行。
動態鏈接庫通常都不能直接運行,也不能接收消息。它們是一些獨立的文件,其中包含能被可執行程序或其它DLL調用來完成某項工作的函數。只有在其它模塊調用動態鏈接庫中的函數時,它才發揮作用。