→ Feis:不錯不錯~ 這些主題有互相輝映 (?)~ 08/28 00:24
→ scwg:這個 orz C++ ABI 各家都不同, 有些 compiler this 用 08/28 08:36
→ scwg:register 傳啊... 推到 stack 上還是不行啊, 不要亂搞啊orz 08/28 08:37
→ elenya:那一種compiler的第一個參數永遠是用A或AX/EAX傳啊 08/28 08:42
→ elenya:用C call DirectX function官方說明文件就教你先取得 func 08/28 08:45
→ elenya:pointer,然後第一個參數給this,我不確定這樣算不算正規作法 08/28 08:45
※ 編輯: descent 來自: 59.125.239.51 (08/28 09:18)
→ Feis:elenya: 這作法應該是在高階語言層次. 08/28 10:01
→ Feis:DirectX 應該是用 COM 來做的 08/28 10:02
→ Feis:也就是為了實現多語言有相同介面. 在底層用 COM 統一 08/28 10:04
→ Feis:不然 VB 也可以呼叫是怎麼辦到的 @_@ (神祕) 08/28 10:05
→ Feis:就我個人觀點. C/C++ 設計是為了在多樣性硬體上運作. 08/28 10:07
→ Feis:為了相容性. 語言本身才會變得這麼複雜. 08/28 10:08
→ Feis:相對於現代許多語言的作法是把硬體抽象化有哲學上的不同 08/28 10:09
→ Feis:C/C++ 沒有把硬體抽象化帶來的成本跟失去彈性 08/28 10:10
→ Feis:但是為了相容性跟效率必須提供許多編譯器彈性空間 08/28 10:10
→ Feis:還有. 不能把話說死. 我們應該用正面表列的方式看待 C/C++ 08/28 10:12
→ Feis:沒說一定能做的事情就是要當做不知道 (逃) 08/28 10:12
→ xatier:對我來說除非預期這份程式碼僅限於在已知的環境下使用,否 08/28 12:49
→ xatier:則能避免這類的問題就盡量避免.. 看到所有 undefined 當作 08/28 12:50
→ xatier:會引起核彈爆炸,快逃XD 08/28 12:50
→ a27417332:所以可以希望有個大大幫這整串做個總結嗎OAO 08/28 16:42
→ a27417332:不過為甚麼debugger可以看到成員函數的位址0.0 08/28 16:42
推 purpose:樓上,就 VC,單指多重繼承狀況下的成員函式指標,他需要 08/28 18:37
→ purpose:該成員函數的開頭位址,這個會剛好存在該指標內。接著還需 08/28 18:38
→ purpose:要一個 this 指標的修正值,假設叫 offset,會另外存在 08/28 18:38
→ purpose:區域變數內,編譯器在傳遞成員函式指標做參數,會分別從 08/28 18:39
→ purpose:這兩個位置去讀出內容,再 push 堆疊,讓 callee 能收到。 08/28 18:40
→ a27417332:所以就沒辦法單從成員函數指標拿到位址,只會出現bool? 08/28 19:28
推 purpose:你來改用 VC 就可以,GCC 我不清楚 08/28 19:35
→ azureblaze:可以說關於成員指標的實做被隱藏了 08/28 19:40
→ azureblaze:對語言而言這使用者不需要知道,也不能讓他亂搞 08/28 19:43