[MFC] AfxMessageBox() 에러를 try catch 문으로 처리하기
글쓴이: yo-tteum / 작성시간: 금, 2010/02/05 - 10:49오후
안녕하세요.
AfxMessageBox() 에는 CString 타입을 인자로 넣어야 하잖아요.
그런데 int 나 dword 등 다른 타입의 인자가 들어갔을 때, 컴파일시에는 오류가 안뜨지만
실행시에 오류가 뜨더라고요.
try
{
AfxMessageBox();
}
catch(e)
{
}
이런식으로 했는데 에러가 여전히 뜨네요.
CATCH_ALL 이런거 써봐도 똑같고요. c#에서는 비어있는 catch 문을 두게되면 에러가 생겨도 아무 반응이 없었는데
알려주세요. ㅠㅠ
Forums:
프로그램은 일련의
프로그램은 일련의 규칙들의 집합입니다. 규칙을 지키지 않았을 경우 어떤 일이 발생할지는 예상되는 것도 있지만
그렇지 않은것도 있습니다.
질문자님께서 하신 행동이 바로 그렇습니다.
함수 호출시에는 반드시 지켜야하는 호출 규칙이 있습니다. 많은것중 하나가 인자 타입입니다.
컴파일러는 주어진 함수 선언과 인자 타입들을 기준으로 메모리에서 어떻게 데이터를 읽으면 되고 쓰면되는지
유추합니다. 그런데 이런 규칙을 깨고 호출을 하시면 컴파일에러는 안날지 몰라도 당연히 실행시 문제가 발생할 수 있습니다.
또한 try~catch문은 try 안에 들어있는 코드에서 예외를 발생할 때만 사용가능한 구문입니다.
또한 try~... 는 c++의 문법입니다. 그런데 AfxMessageBox는 c로 작성된 함수 입니다. 당연히 안에서 예외를 던지지 않습니다.
메모리 접근 오류같은 os에서 던지는 예외를 받으실려면 컴파일러에서 지원하는 다른 방법을 사용하셔야 합니다.
어떤 이유에서 하실련지는 모르겠지만 메모리 오류가 발생하는걸 무시하는건 올바른 프로그램 구성이 아닙니다.
그래도 하시거나 궁금하시면 msdn에서 __try 로 검색해보세요. 또는 structured exception handling 으로 검색해보세요.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
답변 감사합니다.
ㄱㅅㄱㅅ
댓글 달기