接口 DLL 定義虛函數(非純虛),平台 EXE 調用,游戲 DLL 實現。新增虛函數後,部分游戲調用報 Run-Time Check Failure #0 - The value of ESP was not properly saved,提示調用約定不匹配。
__cdecl (/Gd),但 虛函數調用通過 vtable 間接調用,編譯器對虛函數的調用約定處理可能因優化、內聯、不同編譯單元導致不一致。__stdcall/__cdecl/WINAPI 反而破壞了編譯器默認的 thiscall 約定(MSVC 成員函數默認 thiscall:this 指針通過 ECX 傳遞,調用方清棧)。virtual void OnEventABC(int a, bool b);,讓編譯器使用默認 thiscall。跨 DLL 多態接口採用 COM 風格:純虛接口 + 工廠函數創建對象,避免直接跨模塊 new/delete 和虛函數默認實現共享。