看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VS2010 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 其實是被問倒了Q_Q 來求救的 1.第一個問題 #ifdef MYLIBDLL_APP #define MYLIBDLL _declspec(dllimport) #else #define MYLIBDLL _declspec(dllexport) #endif 主要是 被問到.h中 先這樣宣告後 假設 class MYLIBDLL test{ void xxx(); } 當AP call 這個dll時 對於 AP 和 DLL的檔案 如何得知 xxx 這個涵式 是要export 或 import 或是 兩者都要 2.另一個問題是 我是用VS2010寫 本來以為直接用vs include lib 是靜態連結 程式碼中寫是動態連結 類似 HINSTANCE hTest; HMODULE myPlugin=NULL; myPlugin = LoadLibrary( " test.dll " ) 但被指證 說兩個都是動態連接, 實際靜態連接是指編譯後會包到exe內 但這又該如何撰寫><? 這兩種的方式有點搞不太懂阿 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.240.185.176
christianSK:1. MYLIBDLL是否有define決定 01/03 23:01
christianSK:2. 該如果撰寫是什麼意思? 01/03 23:02
jackace:回答2:用LoadLibrary 動態載入 lib在執行到LoadLibaray時 01/03 23:02
jackace:才被載入到記憶體 用include lib若不指定靜態連結 程式庫 01/03 23:03
jackace:是在OS load你的程式的時候幫你一起載入並連結 01/03 23:04
jackace:用include lib指定靜態連結的話 程式庫直接編進你的程式 01/03 23:05
purpose:*.lib 沒有分指不指定靜態連結吧,都是直接連結進*.exe內 01/03 23:23
purpose:只不過 dll 用的 *.lib 只是幫忙動態連結,裡面沒程式碼 01/03 23:24
pigcat1315:1樓大大...@@ 還是不太懂 01/03 23:31
christianSK:compile的時候或者是code其他部分是否有定義MYLIBDLL 01/03 23:50
jackace:痾..我的lib不是*.lib的意思是dll library 有點誤導抱歉 01/04 01:52
pigcat1315:那如果定義了MYLIBDLL 是import 還是export? 01/04 01:56
EdisonX:話說那個 #ifdef MYLIBDLL 怪怪的.. 有重覆定義之可能.. 01/04 02:02
漏了抱歉 ※ 編輯: pigcat1315 來自: 111.240.168.229 (01/05 03:22)
EdisonX:那答案應該明顯了吧 @@ 有定義 MYLIBDLL_APP 時是 import, 01/05 10:19
EdisonX:沒定義時是 export 01/05 10:19
firose:export 是做 DLL 輸出用的, import 是使用端用的, 優化呼叫 01/05 12:08
firose:dllimport 可以直接編成 IAT 呼叫, 沒有會多一個中間步驟 01/05 12:19
主要會不懂是還有幾點, 1.當我有在dll 先#define MYLIBDLL_APP xxx會變export對吧 但AP 也還是能呼叫,這樣有差異嗎? 2. 網路上我也看了文章,是指有import 編碼會較好 ,會少2個jump? 不過在VS上沒寫import dll是不會編譯過 3.AP 中我如果也先 #define MYLIBDLL_APP 會有差異嗎? , 我測試的檔案能使用此DLL ,但不知有沒有差異性 ※ 編輯: pigcat1315 來自: 111.240.168.229 (01/05 14:58)