windows環境下動態庫的載入有兩種方式,記錄如下。
環境:vs
1.載入動態庫的兩種方式
2.隱式載入
隱式載入在程式開始執行時將dll檔案載入到記憶體中。這種載入方式需要:.**件,.dll檔案,.lib檔案。
如果.lib檔案沒有放入搜尋路徑,可在程式中使用#pragma comment(lib,libpath)顯示鏈結。
3.顯式載入
顯式載入是實時載入,程式需要時載入,不需要時解除安裝。這種載入方式需要:.**件,.dll檔案。
這種載入方式的示例參考在程式中動態載入動態庫(win)。
下面說一下示例程式的.**件:
(1)extern "c"
鏈結器生成的dll檔案中會嵌入乙個匯出符號表,這個匯出段列出了匯出的變數、函式和類的符號名。
c語言不支援過載,由c編譯器編譯的動態庫匯出的函式的符號名就是源**中函式的名字。c++語言支援過載,由c++編譯器編譯的動態庫匯出的函式的符號名不是源**中函式的名字,c++編譯器會對源**中函式的名字做乙個修改,以確保匯出的函式的符號名的全域性唯一性。
使用extern "c"就是要告訴編譯器不要對函式名就行修改,以c語言的方式匯出函式的符號名。由c++編譯器生成的函式的符號名需要使用工具才能檢視,這樣就不方便對庫函式的呼叫,使用extern "c"來指定編譯器生成c風格的函式符號,方便對庫函式的呼叫。
(2)__declspec(dllexport)
編譯器看到乙個變數、函式或者c++類被它修飾,那麼它就知道應該在生成的dll 模組中匯出該變數、函式或c++類。
(3)__declspec(dllimport)
編譯器看到乙個變數、函式或者c++類被它修飾,那麼它就知道可執行檔案或dll的原始檔需要從其它dll模組中匯入一些變數和函式。
注:(1)dumpbin(vs自帶):檢視dll庫中函式的符號名。
(2)在一些對外提供介面的專案中,業務邏輯可以使用c++物件導向思想去完成,對外提供介面的方式可以按照示例程式在程式中動態載入動態庫(win)中的方式對外提供。
動態鏈結庫的兩種方式
呼叫乙個dll中的函式有兩種方法 1 載入時動態鏈結 load time dynamic linking 模組非常明確自己要呼叫哪些匯出函式,使得它們就像本地函式一樣。要達到如此,需要鏈結時鏈結那些匯出函式所在dll的導入庫,導入庫向系統提供了載入dll時所需的資訊 庫的符號鏈結之類 及dll函式定...
動態鏈結庫的兩種方式
呼叫乙個dll中的函式有兩種方法 1 載入時動態鏈結 load time dynamic linking 模組非常明確自己要呼叫哪些匯出函式,使得它們就像本地函式一樣。要達到如此,需要鏈結時鏈結那些匯出函式所在dll的導入庫,導入庫向系統提供了載入dll時所需的資訊 庫的符號鏈結之類 及dll函式定...
頁面載入JS兩種方式
第一種 window.onload function 第二種 document ready function 或簡寫 function 區別 1.執行時間 window.onload必須等到頁面內包括的所有元素載入完畢後才能執行。document ready 是dom結構繪製完畢後就執行,不必等到載...