Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.

2116 단어 function
IIS 관리 구성 요소를 호출할 때 다음 코드를 작성했습니다. 함수를 호출할 때 알림 오류: Run-Time Check Failure #0 - ESP의 value was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
 1 std::wcout.imbue(std::locale("chs"));
 2 ::CoInitialize(NULL);
 3 
 4 CLSID clsid;
 5 HRESULT hr = ::CLSIDFromProgID(PROGID_WRITABLEADMINMANAGER, &clsid);
 6 
 7 CComPtr pAdminMgr;
 8 hr = ::CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, reinterpret_cast(&pAdminMgr));
 9 
10 CComVariant vtServerPath(XLOG_CFGSECTION_SERVER_XPATH);
11 CComVariant vtAppHost(CFG_PATH_APPHOST);
12 CComVariant vtServerConfigSection;
13 
14 hr = pAdminMgr.PutPropertyByName(_T("CommitPath"), &vtAppHost);

외국 포럼에서도 많은 사람들이 이 문제를 제기하여 Calling Convention을 원래의 __cdecl(/Gd)__로 수정stdcall(/Gz), 사실 IUnknown이 IDispatch로 변환된 문제 때문입니다.

좋은 웹페이지 즐겨찾기