Re: vc++的.def對dll函數的影響??
※ 引述《happyjob.bbs@bbs.nsysu.edu.tw》之銘言:
> 平常針對我寫的dll,我都是用.h & .lib & .dll的方式引用。
> 但目前想改用LoadLibrary的方式,但發覺GetProcAddress()都抓
> 不到函數位址。
> 聽別人講,要有.def檔,請問在vc++中要怎麼做?
在函數宣告前面加上 extern "C"
不然他會被加上 decorated name
因為預設是 C++ 編譯,所以函數名稱會改變 (為了支援多載)
就是說他在 DLL 裡面的實際函數名稱是修飾過的
比方說 max ( int, int ) 可能名稱是 "max@int@int"
你用 GetProcAddress() 就必須輸入 max@int@int 這種怪名字才能抓到
所以你要用用 extern "C" 來限制他的函數名稱
當然這樣做的話 這個函數名稱就沒辦法被多載
--
To iterate is human, to recurse is divine.
遞迴只應天上有, 凡人該當用迴圈. L. Peter Deutsch
--
夫兵者不祥之器物或惡之故有道者不處君子居則貴左用兵則貴右兵者不祥之器非君子
之器不得已而用之恬淡為上勝而不美而美之者是樂殺人夫樂殺人者則不可得志於天下
矣吉事尚左凶事尚右偏將軍居左上將軍居右言以喪禮處之殺人之眾以哀悲泣之戰勝以
喪禮處之道常無名樸雖小天下莫能臣侯王若能守之萬物將自賓天地相合以降甘露民莫
之令而自均始制有名名亦既有夫亦將知止知止可以不 yoco.Dorm-GD2.NCTU.edu.tw海
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 2 之 3 篇):
Programming 近期熱門文章
PTT數位生活區 即時熱門文章