C++ Run-Time Check Failure #0 錯誤記錄
最近工作中,需要調用第三方SDK, 我這邊是動态調用DLL檔案,加載DLL庫和導出函數位址都成功了,但是在調用的時候卻報錯彈框了,調試的時候彈框如下:
錯誤描述是函數調用約定不一緻破壞了ESP的值,處理如下:
1、代碼中,函數聲明 typedef void (__stdcall* pFun)(),使用調用規範為__stdcall,于是檢視項目屬性的調用約定
2、點選【項目】->【屬性】->【配置屬性】->【C/C++】->【進階】->【調用約定】 ,檢視預設約定方式為__cdecl (/Gd),于是改為__stdcall (/Gz);儲存之後重新編譯,結果還是不行;
3、于是将函數聲明改為typedef void (__cdecl * pFun)(),同時将項目屬性的調用約定改為__cdecl (/Gd),儲存重新編譯居然可以了;應該是DLL中使用的函數調用約定方式為__cdecl