看板 C_and_CPP 關於我們 聯絡資訊
平台是在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
LPH66:http://tinyurl.com/bgwletc 這是連結 dll 所需要的函數 03/13 12:40
LPH66:理論上 Windows API 的話應該要有一個 lib 裡面是這些東西 03/13 12:40
lausai:這個程式設計師自我修養裡面有講得很清楚喔~ 03/13 12:55
QQ29:修養我忘記討論windows那塊了,修養看的好辛苦啊,對我來講好 03/13 13:09
QQ29:深……我再翻翻看 03/13 13:10
QQ29:請問修養第幾頁有提到呢? 我翻第九章沒提到這耶@@ 03/13 14:17
lausai:手邊沒書 記得好像是在講 dll 重定位的前面 建議看仔細點~ 03/13 14:40
firose:記得是用來明確指出它是輸入函式,可以直接對應 IAT 呼叫 03/13 18:00