關於GetProcAddress和名稱修飾

2021-10-09 23:49:18 字數 731 閱讀 5389

dllexport屬性告訴鏈結器:請將指定的函式標記為匯出並為它生成乙個匯出項。

這個匯出項是經過修飾的,對於匯出多個過載的函式來說,匯出修飾後的名稱是十分必要的。但是,這也意味著:你傳入到getprocaddress函式中的函式字串也需要是修飾版本的。

從我們之前的幾篇關於呼叫約定的文章中,我們知道,函式匯出名稱的修飾語法在各種硬體平台上是各不相同的,同時,隨著呼叫約定的不同,匯出的名稱也會不同。

舉個例子,如果你從powerpc平台上的乙個dll中匯出乙個函式,則你需要使用getprocaddress(hinst, 「..somefunction」)來獲取這個這個函式指標。

如果是80386平台上使用extern 「c」 __stdcall呼叫約定,則需要使用getprocaddress(hinst, 「_somefunction@8」)。如果使用的是__fastcall呼叫約定,則需要使用getprocaddress(hinst, 「@somefunction@8」)。

另外,c++裡的名稱修飾和編譯器廠商相關。如果是microsoft c++編譯器,則對於乙個c++匯出函式,需要使用getprocaddress(hinst, 「?somefunction@@ygxhh@z」),但是如果是borland c++編譯器,則需要另外的函式字串來表示。

所以,如果你開發了乙個函式,你希望你的函式在各種不同的硬體平台,或者不同的語言,或者不同的c++編譯器上都可以供客戶呼叫,那麼你必須匯出它的未修飾版本。

當生成乙個dll時,

關於程式關於世界

首先,在學了1年多的軟體設計的基礎上,問下自己 程式是什麼?業務需求是什麼?程式有什麼用?什麼是演算法?什麼是資料庫?或許每個人的理解不同,會給出不同的答案。那麼自己的理解 程式是乙個讓計算機工作的流程,在程式寫好之後,計算機就會按照,程式設計師定義好流程在執行。其實很多時候,乙個程式的好壞,在於乙...

關於血液關於軟體

1 自然沉降法 將血袋垂直吊掛於4 2 冰箱內,使紅細胞自然下沉1 3d,或將血袋呈70 80 角立於冰箱,需用時,用一次性分漿器分出血漿,制得濃縮紅細胞。2 洗滌法 一般用生理鹽水反覆洗滌3 6次。經洗滌的紅細胞,除白細胞和血小板減少外,血漿蛋白也極少,紅細胞中殘存的血漿蛋白含量約為原總蛋白的1 ...

關於冷漠,關於愛情

我不知道為什麼今天又莫名其妙開始思考愛情這件事,隨之就解決了我一直無法面對冷漠這件事 被冷漠是我始終無法消化的一件事,每當遇見冷漠時,我總會覺得就像一團火把自己燒得面目全非,但對方卻毫無傷害。但我突然懂了,遇到冷漠時,體面的離開即可 在乎你的人一定會在你離開後,找到你跟你解釋為什麼 連解釋都來不及,...