티스토리 뷰


"
Run-Time Check Failure #0 - 
The value of ESP 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.
"

http://www.cocos2d-x.org/forums/6/topics/37531


오늘 위 링크에 나온 에러를 겪었는데 참 난감했다. 여태껏 프로그래밍 하면서 한 번도 만난 적이 없었던 에러였는데 해결 방법 조차도 난해했기 때문이다. 다른 개발자 분들은 어떤식으로 개발하시는지 모르겠지만 현재 내 프로젝트에서는 CCCallFunc를 이용해서 Event Driven을 하고 있다.


일단 내가 오늘 위 에러를 해결한 방법은 Wrapping용 함수를 생성한 것이다. CCCallFunc을 생성할 때 callfunc_selector를 쓰게 되어있는데, 이 selector 안에 '다중 상속을 받은 클래스의 가상함수'를 넣어서 쓰니까 에러가 났던 것이었다. (간헐적 발생이었던건지 아닌지는 기억이 잘 안 난다. 시간이 없어서 제대로 연구를 못해봤다....;;) 


클래스에다가 Wrapping용 함수(가상함수가 아닌 함수)를 하나 생성한 뒤, 그 함수 내부에서 원래 호출하려던 함수를 호출하게 하고, Wrapping용 함수를 selector에 넣어 작동하게 하면 에러가 나지 않는다.


아직 C++에 미숙해서 그런가 굉장히 당황스러웠던 에러다. 검색해서 나오는 일반적인 자료에는 프로젝트 옵션에서 calling convention을 바꿔라 그러는데 정작 프로젝트 옵션에서 stdcall로 변경하면 cocos2d-x 엔진쪽에서 에러가 나는데다가, visual studio에서 설정 바꿔봤자 다른 플랫폼 위해서 gcc 같은걸로 컴파일 해서 나온 결과도 기존 문제 그대로 안고 갈 것 같고.... 하여튼 일단 해결하긴 했는데 더 연구해봐야 할 문제인 것 같다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday