[Error]error C2440: 'static_cast' : 'void (__thiscall CClientAppDlg::* )(WPARAM,LPARAM)'에서 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)'(으)로 변환할 수 없습니다.
프로그래밍/MFC 2014. 8. 28. 21:41Visual Studio 6.0 코드를 VS2008로 포팅하면서 발생할 수 있는 문제 중 하나....
형변환 캐스팅 관련 문제인데 상위 버전으로 오면서 캐스팅이 더욱 엄격해지면서 발생한는 문제로 사료됨
일단 에러가 발생한 부분
ON_MESSAGE(LOGGING_LIST, LoggingListBox)
이곳의 정의가 이렇게 되어 있다.
#define ON_MESSAGE(message, memberFxn) \
{ message, 0, 0, 0, AfxSig_lwl, \
(AFX_PMSG)(AFX_PMSGW) \
(static_cast< LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM) > \
(memberFxn)) },
빨간색으로 표시한 저 부분이 문제를 일으키는 부분인데 이전 6.0이전의 버전에서는 메세지 핸들러를 이용해서 변경이 되었으나 2008이상(2005는 사용 안해봐서 잘 모르겠음)부터는 static_cast를 이용해서 변경되면서 이곳이 문제가 된다.
따라서 정의를 수정하지 않고 다음과 같이 수정하면 문제가 해결 가능하다.
수정 전 : ON_MESSAGE(LOGGING_LIST, LoggingListBox)
수정 후 : ON_MESSAGE(LOGGING_LIST, (LRESULT(AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM))LoggingListBox)
참고!( LRESULT )
--> long 타입형으로 win32환경에서 메시지 처리를 마친후 OS에게 신호를 주기 위한것으로 사용함
--> 0을 반환시는 메세지 처리를 알아서 할테니 OS는 더이상 신경쓰지마라! (꼭 그렇지는 않지만 대부분)
'프로그래밍 > MFC' 카테고리의 다른 글
[MFC 초급] 디지털시계(+예제파일) (0) | 2014.06.15 |
---|