[問題] export dll時 lib中symbol的問題

看板C_and_CPP作者 (我愛阿蓉)時間11年前 (2013/03/13 11:38), 編輯推噓3(305)
留言8則, 4人參與, 最新討論串1/2 (看更多)
平台是在VC 大家好 請教各位一個link的問題 我現在在某平台呼叫一個API 例如 ShellExecuteEx(NULL); 出現link error Error 9 error LNK2001: unresolved external symbol __imp_ShellExecuteExW 當然我知道一定是lib沒加入 找不到這symbol 但我的疑問是 為啥他會直接顯示__imp版本找不到? 而不是說_ShellExecuteEx@4找不到? 原本是懷疑mangling問題 他不知道用什麼機制會把function name 翻成_imp prefix... 但我覺得沒道理 所以我把PC版本的lib dump出來 確實有兩個symbol __imp__ShellExecuteEx@4 _ShellExecuteExA@4 所以我覺得他會不會是實作寫 ShellExecuteEx(...) { imp__ShellExecuteEx(...); } 但若是這樣 我把這平台所有的lib dump symbol出來 至少要會有_ShellExecuteExA@4 而沒有__imp__ShellExecuteEx@4 , 我的想法才應該沒 錯~~~ 現在就很不解這個問題 但win32 的dll好像都是這樣設計 常常看到_imp版本開頭的unresolved... 仔細想想卻不太明白為啥是找不到_imp版本... 請教各位 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.147.15.66

03/13 12:40, , 1F
http://tinyurl.com/bgwletc 這是連結 dll 所需要的函數
03/13 12:40, 1F

03/13 12:40, , 2F
理論上 Windows API 的話應該要有一個 lib 裡面是這些東西
03/13 12:40, 2F

03/13 12:55, , 3F
這個程式設計師自我修養裡面有講得很清楚喔~
03/13 12:55, 3F

03/13 13:09, , 4F
修養我忘記討論windows那塊了,修養看的好辛苦啊,對我來講好
03/13 13:09, 4F

03/13 13:10, , 5F
深……我再翻翻看
03/13 13:10, 5F

03/13 14:17, , 6F
請問修養第幾頁有提到呢? 我翻第九章沒提到這耶@@
03/13 14:17, 6F

03/13 14:40, , 7F
手邊沒書 記得好像是在講 dll 重定位的前面 建議看仔細點~
03/13 14:40, 7F

03/13 18:00, , 8F
記得是用來明確指出它是輸入函式,可以直接對應 IAT 呼叫
03/13 18:00, 8F
文章代碼(AID): #1HF_JHnI (C_and_CPP)
文章代碼(AID): #1HF_JHnI (C_and_CPP)