Re: [問題] DLL的使用

看板C_and_CPP作者 (好悶, 迷惘~~)時間12年前 (2012/01/05 23:28), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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
THANKS
01/05 23:45, 1F
文章代碼(AID): #1F1S6rV1 (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1F1S6rV1 (C_and_CPP)