본문 바로가기

app/C

: error C2440: 'static_cast' : 'void (__thiscall CTrayDlg::* )(WPARAM,LPARAM)'에서 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)'(으)로 변환할 수 없습니다.

정적 캐스팅 및 MFC 메시지 맵   Visual C++ .NET부터는 MFC에서 메시지 처리기 함수의 반환 형식 및 매개 변수 형식을 보다 엄격하게 검사합니다. 
이 새로운 동작은 안전하지 않은 메시지 처리기를 오류 메시지로 플래그를 지정하여 발생할 수 있는 문제를 개발자에게 알립니다.
ON_MESSAGE, ON_REGISTERED_MESSAGE, ON_THREAD_MESSAGE 및 
ON_REGISTERED_THREAD_MESSAGE에 대해 정적 캐스트를 사용합니다. 

예를 들어, 이전에는 개발자가 ON_MESSAGE 또는 ON_REGISTERED_MESSAGE에 대해 LRESULT 대신 void를 반환하는 멤버 함수를 사용하여 오류 없이 컴파일할 수 있었지만
Visual C++ .NET에서는 발생할 수 있는 캐스트 오류를 catch하여 오류로 플래그를 지정합니다.
 따라서 개발자는 반환 형식을 LRESULT로 바꾼 다음 다시 컴파일하여 해당 문제를 간단하게 해결할 수 있습니다. 

-------------------
위 내용은   .NET MSDN에서 발췌 했습니다.

헤더파일의 afx_msg void OnChangeVol(WPARAM wParam);  -> afx_msg LRESULT  OnChangeVol(WPARAM wParam); 
CPP에서도 동일하게 LRESULT라고 바꿔주면 됩니다.

참고 : LRESULT 는 MS VisualStudio\VC98\Include\WTYPES.H 에서 찾아볼수 있습니다.


이 에러는 6.0에서 사용자 메시지 WM_ 함수들은 void 형식이여도 상관없지만 .net 이후의 버전에서는 철저하게 검사하기 위해서 WM_ 함수들의 반환값을 LRESULT 로 해야하는 규정이란다. 

LRESULT - 콜백 함수나 원도우 프로시저가 return 하는 32bit 값


'app > C' 카테고리의 다른 글

head first iphone 1장~  (0) 2010.06.24
object-c 정리 그림!  (0) 2010.06.23
MFC 더블 버퍼링  (0) 2010.04.20
MFC EDITBOX control  (0) 2010.04.06
dll viewer anywherepeviewer  (0) 2010.03.26