[問題] __stdcall 和 __cdecl的問題
大家好
刻意google這兩者的差別
都有做簡短的介紹
除了name mangling會不一樣
好像是處理堆疊的方式會因為這兩個 "修飾字" 而不一樣
但這網頁特別有說一句話
http://www.wretch.cc/blog/zevoid/216921
"不論透過動態或靜態連結至第三方的函式庫,一定要弄清楚呼叫協定為何,不然執行時
期會發生堆疊被打亂的嚴重情形。"
乍聽之下好像有道理
但我想一想
假如我做一個dll
declaration 在.h 有冠上__stdcall
對方引用我的dll
若他是implicit 方式 , 勢必需要我的.h檔案
那這樣為啥還會有她說的那句話問題產生?
我想到唯一可能的方式 是...他刻意修改我的.h檔案
把__stdcall拿掉 改成__cdecl
但這樣 name mangling後...應該會變成unresolved external symbol...
所以我想不到他這句話會有甚麼情況會產生這問題?
若是explicit link...
我用GetProcAddress 也不用 (更是不知道) 對方到底是__stdcall還是__cdecl...
這樣會出問題嗎?
這邊也不是很明白
提出來請教各位
謝謝
ps. 我故意在VC打 void __stdcall Foo(); 下一行打 void __cdecl Foo();
他會寫說我redefine了..
這是VC compiler刻意擋掉嗎? 照理講不是Decorate後 會不一樣 怎會產生這compile
error@@?
感謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.147.15.66
→
04/23 15:29, , 1F
04/23 15:29, 1F
→
04/23 15:30, , 2F
04/23 15:30, 2F
推
04/23 16:44, , 3F
04/23 16:44, 3F
→
04/23 16:45, , 4F
04/23 16:45, 4F
→
04/24 22:36, , 5F
04/24 22:36, 5F
→
04/24 22:38, , 6F
04/24 22:38, 6F
→
04/24 22:38, , 7F
04/24 22:38, 7F
→
04/24 23:51, , 8F
04/24 23:51, 8F
→
04/25 00:10, , 9F
04/25 00:10, 9F
→
04/25 00:11, , 10F
04/25 00:11, 10F
→
04/25 02:36, , 11F
04/25 02:36, 11F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章