Re: [問題] DLL的使用
※ 引述《pracinverse (改)》之銘言:
: 在使用DLL和LIB之間有點搞不清楚,
: 使用VC的project可以選擇DLL或static library,
: 選擇DLL的project,build出來會是一個dll,
: 選擇static library,build出來會是一個lib,
: dll中的function要export出去有兩個選擇,
: 1. 使用def檔
: 2. 使用__declspec(dllexport)關鍵字
: 若使用方法2,則除了build出dll檔外,還會再build出一個lib檔,
: 若用靜態連結來使用該dll的話,除了需要dll檔,還需要link額外產生的lib檔
: 以及include該dll的header file...
: 若使用動態連結,則只需要dll檔即可
: Q1. 為什麼使用靜態連結還除了dll檔之外需要lib檔呢?
A1. 靜態連結僅需要.lib, 不需要.dll
動態連結需要.dll, 至於.lib則看使用方式
: Q2. 從方法2產生出來的lib檔,和從選擇static library project產生出來的lib檔
: 有什麼不同呢?
方法1與方法2某種程度上相同的
: Q3. dll和lib檔裡放的都是object code,兩者之間有什麼不同呢?
你如果建立的是純.lib, 則裏頭會放編譯後完整的程式
如果建立的是.dll, 則.dll裏頭是完整的程式,
建置產生的.lib, 其內容僅為stub, 你可以直接呼叫這些stub,
而這些stub會幫你轉呼叫到.dll內真正的程式
如果沒有透過.lib內的stub...
你必須要透過LoadLibrary和GetProcAddr才能取得函數的進入點, 進而呼叫到該函數
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.43.60.148
推
01/05 23:45, , 1F
01/05 23:45, 1F
討論串 (同標題文章)