話說到了現在這間公司以後,常常會遇到DLL的問題,讓我開始好奇DLL到底是什麼東西哩!(平常都只在電腦裡面看的到dll檔,但不知道是做什麼的)
後來看了相關的介紹才知道DLLs是執行時期模組化^^
DLL是一個磁碟檔案,通常以DLL做為副檔名,內含全域資料、編譯後的函式、資源等
DLL可能擁有各式各樣的輸出(Export)函式,呼叫端(載入DLL)則是輸入(Import)
DLL內含一個Exported函式表格,這些函式使用名稱及一個可有可無的序號(ordinal no.)來做識別,函式表格也包含函式在DLL中的位址。呼叫端最初載入DLL時,並不知道要呼叫的函式位址,只知道函式的名稱或序號
在DLL碼中,必須明白宣告輸出函式,而在呼叫端則必須宣告對應的輸入函式,如果只做輸入的宣告,沒有辦法讓呼叫端與DLL聯結,呼叫端還是必須為聯結器指定一個import函式庫(LIB),也必須真正呼叫至少一個DLL函式,這個呼叫的動作並不需要被執行,但是必須讓編譯器看的到它
隱式聯結建造DLL時,聯結器會產生一個伴隨的import LIB檔,其中內含DLL所有的輸出符號及序號,但沒有程式碼。將此import LIB與呼叫者靜態聯結,輸入符號就被匹配到輸出符號上,而這些符號或序號就可以被聯結到EXE檔內。LIB檔也內含DLL檔案名稱,但沒有完整的路徑,只是被記錄到EXE檔裡頭,當呼叫者被載入,Windows就可以找到並載入DLL,再根據符號或序號動態聯結裡面的函式
而顯示聯結比較適用於直譯式語言(Ex. Visual Basic),所謂顯式聯結是在程式中呼叫Win32 LoadLibrary函式,並以DLL的路徑名稱做為參數
隱式聯結中所有的DLLs都在呼叫者載入時一起合併載入,顯示聯結允許在執行時期決定載入哪一個DLL
嗯~~以上是我在看書中對於DLL介紹中比較覺得能理解的東西,至於其它的內容,我想應該還是要實作才會比較了解吧orz…

arrow
arrow
    全站熱搜

    如雲 發表在 痞客邦 留言(0) 人氣()