2 回答

TA貢獻1842條經驗 獲得超13個贊
__cdecl 是C Declaration的縮寫(declaration,聲明),表示C語言默認的函數調用方法:所有參數從右到左依次入棧,這些參數由調用者清除,稱為手動清棧。被調用函數不會要求調用者傳遞多少參數,調用者傳遞過多或者過少的參數,甚至完全不同的參數都不會產生編譯階段的錯誤。
_stdcall 是StandardCall的縮寫,是C++的標準調用方式:所有參數從右到左依次入棧,如果是調用類成員的話,最后一個入棧的是this指針。這些堆棧中的參數由被調用的函數在返回后清除,使用的指令是 retnX,X表示參數占用的字節數,CPU在ret之后自動彈出X個字節的堆??臻g。稱為自動清棧。函數在編譯的時候就必須確定參數個數,并且調用者必須嚴格的控制參數的生成,不能多,不能少,否則返回后會出錯。
第四個參數的調用方式不一樣,你修改一下就行了

TA貢獻1886條經驗 獲得超2個贊
你看一下錯誤提示:
cannot convert parameter 4 from 'int (const void *,const void *)' to 'int (__cdecl *)(const void *,const void *)'。
意思是:不能把int (const void *,const void *)這個類型,自動轉化為int (__cdecl *)(const void *,const void *)
所以你可以手動轉化:直接在你調用自己寫的cmp函數之前加一個(__cdecl *)這樣的類型轉換,試試
- 2 回答
- 0 關注
- 238 瀏覽
添加回答
舉報