動態鏈結庫dll的 靜態載入 與 動態載入

2021-07-07 08:13:01 字數 2065 閱讀 3528

dll 兩種鏈結方式  : 動態鏈結和靜態鏈結(鏈結亦稱載入)

動態鏈結是指在生成可執行檔案時不將所有程式用到的函式鏈結到乙個檔案,因為有許多函式在作業系統帶的dll檔案中,當程式執行時直接從作業系統中找。   而

靜態鏈結就是把所有用到的函式全部鏈結到exe檔案中。

動態鏈結是只建立乙個引用的介面,而真正的**和資料存放在另外的可執行模組中,在執行時再裝入;  

而靜態鏈結是把所有的**和資料都複製到本模組中,執行時就不再需要庫了。

1.生成靜態鏈結庫 

lib和動態鏈結庫 dll

新建工程 (

newdll)  win32專案 ->  dll

新增.h檔案 

betabinlib.h

[cpp]view plain

copy

#ifndef betabinlib_h

#define betabinlib_h

#ifdef newdll_exports   //自動新增的巨集   右鍵工程-屬性-配置屬性-預處理器-..定義

#define mydll_api extern "c" __declspec(dllexport)

#else

#define mydll_api extern "c" __declspec(dllimport)

#endif

mydll_api int

add(

intx, 

inty);  

// 必須加字首

#endif

新增.cpp檔案  betabinlib.cpp

[cpp]view plain

copy

#include "stdafx.h"

#include "betabinlib.h"

intadd(

intx, 

inty)    

編譯生成  .dll 和 .

lib檔案

2.使用

(1)dll的靜態載入--將整個dll檔案 載入到  .exe檔案中

特點:程式較大,占用記憶體較大,但速度較快(免去 呼叫函式load

lib等)

測試:需要  .

lib和 .dll兩個檔案     (.

lib做 引導用),.h檔案

main.cpp

[cpp]view plain

copy

#include 

#include "betabinlib.h"

#include 

#pragma comment(lib, "newdll.lib")

intmain()    

(2) dll的動態載入--根據需要載入響應函式,隨時可解除安裝。不會因為找不到dll, 導致程式不能執行(需要自己做判斷處理)。

只需要 .lib檔案,不需要 .h檔案

main.cpp

[cpp]view plain

copy

#include 

#include 

intmain()  

else

else

freelibrary(h);  

}  return

0;  

}  

main.cpp

[cpp]view plain

copy

#include 

#include 

intmain()  

else

else

freelibrary(h);  

}  return

0;  

}  

動態鏈結庫DLL的載入

程式設計師的自我修養 鏈結 裝載與庫 學習筆記 dll,即動態鏈結庫 dynamic link library 在實際應用開發過程中,為了以後對已經開發好的軟體程式進行更好的維護和管理,程式的模組化是乙個很好的管理方法,程式設計師大都喜歡把某一模組的功能做成dll檔案,然後匯入到工程目錄中,再進行載...

動態鏈結庫與靜態鏈結庫

有人會想,動態鏈結這樣麻煩,為什麼還要用呢?這裡有乙個技術問題,對這個問題的解決直接導致了動態載入的需求。問題是有些dll只在某個windows版本中存在,或某個api只在某些windows版本中被加入指定的dll。當你使用靜態鏈結的.exe試圖在不支援的windows版本上執行時,系統會彈出系統對...

動態鏈結庫與靜態鏈結庫

原貼出處 http blog.csdn.net benny5609 archive 2008 04 17 2298998.aspxs 還有參考 http msdn.microsoft.com zh cn library 1ez7dh12 v vs.100 aspxs 首先通過乙個簡單的靜態鏈結庫的例...