dll動態鏈結庫(3) 函式呼叫方式

2021-06-18 04:56:58 字數 1096 閱讀 9136

隱式鏈結的特點是由編譯器完成對dll的載入和程式結束時對dll的解除安裝工作,如果程式結束時如果還有其他應用程式使用該dll,那麼系統會使dll的使用計數減1,當dll的使用計數降為0時,會將dll從記憶體中刪除。

■使用方法:使用隱式鏈結dll開發時,首先,需要將dll的引入庫檔案(*.lib--編譯生成dll時,會一起生成的)與應用程式進行靜態鏈結,因為引入庫檔案包含dll的各種輸出資源,如匯出函式,匯出類等資訊,這些資訊指向dll的函式指標等等,exe執行時,dll被 「自動」 載入,exe退出時dll被 「自動」 解除安裝。

顯示鏈結方式是完全由程式設計者用api 載入和解除安裝dll,程式設計者可以決定何時載入dll,載入哪個dll,何時解除安裝dll,解除安裝哪個dll等。

■使用方法:

loadlibrary(...):該 api 用於載入指定的dll;

getprocaddress(...):該 api 用於獲取dll中匯出函式的指標, 即匯出函式的入口點;

freelibrary(...):該 api 用於解除安裝指定的dll。

〓注:如果程式中多次呼叫loadlibrary(...)載入同一dll時,在解除安裝的時候也要呼叫相應次數的freelibrary(...)進行解除安裝。

3、舉例說明……

①exe檔案所在的目錄:

②程序的當前工作目錄:

③windows系統目錄:例如:c:\windows\system32

④windows目錄:例如:c:\windows

⑤環境變數的目錄:我的電腦-->屬性-->高階-->環境變數

說明:●程序的當前工作目錄:使用函式setcurrentdirectory(...)設定的路徑,或者從父程序繼承而來的路徑,使用getcurrentdirectory(...)得到。 

●exe檔案所在的目錄:本exe檔案所在的絕對路徑, 使用getmodulefilename得到。 

兩者可能不同。 

▲getprocaddress函式可以有兩種方式取得dll匯出函式的入口點:

例如:getprocaddress(hmod, "add"); //按照函式名稱方式;

getprocaddress(hmod, makeintresourcea(1)); //按照匯出函式序號方式;

呼叫動態鏈結庫(dll)

步驟 1.tools options projects and solutions vc directories分別在包含檔案,庫檔案填加了路徑 這些路徑只告訴編譯器怎麼找檔案,沒有說把那裡面的檔案加入工程.若不設定,編譯報錯 無法開啟 檔案 2.project properties c c gen...

動態呼叫鏈結庫(dll) 續

最近一周做了乙個關於倉庫管理,揀貨任務分配的模組,其中涉及到刷卡自動列印領取任務的功能點。技術點 c 呼叫c delphi的動態鏈結庫。動態鏈結庫的呼叫方法不同。效果也不相同。dll位置 執行程式根目錄下面 例 第一種 dllimport shuipiao1.dll entrypoint check...

動態鏈結庫呼叫方式

首先來說說呼叫的原理 呼叫dll,首先需要將dll檔案映像到使用者程序的位址空間中,然後才能進行函式呼叫,這個函式和程序內部一般函式的呼叫方法相同。windows提供了兩種將dll映像到程序位址空間的方法 隱式呼叫 通過lib和標頭檔案 和顯式呼叫 只通過提供的dll檔案 下面對這兩種方式在vc中如...