error C2440: ‘static_cast’ : cannot convert from ‘~’ to ‘~’

less than 1 minute read

error C2440: ‘static_cast’ : cannot convert from ‘void (__thiscall CWMCALOADERDlg::* )(WPARAM,LPARAM)’ to ‘LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)’

MSDN은 안보이는데… 관련 에러에 대한 다른 포스팅들

http://blog.stevienova.com/2007/02/28/error-c2440-static_cast-cannot-convert-from-uint-__thiscall-cstaticlink-cpoint-to-lresult-__thiscall-cwnd-cpoint/

 

가장 도움이 된 곳 http://devday.tistory.com/entry/error-C2440-staticcast-cannot-convert-from-void-thiscall-XXX-WPARAMLPARAM-to-LRESULT-thiscall-CWnd-WPARAMLPARAM

 


BEGIN\_MESSAGE\_MAP(CWMCALOADERDlg, CDialog)
	//{{AFX\_MSG\_MAP(CWMCALOADERDlg)
	ON\_WM\_PAINT()
	ON\_WM\_QUERYDRAGICON()
	ON\_BN\_CLICKED(IDC\_CONNECT, OnConnect)
	ON\_BN\_CLICKED(IDC\_DISCONNECT, OnDisconnect)
	ON\_BN\_CLICKED(IDC\_BALANCE, OnBalance)
	ON\_BN\_CLICKED(IDC\_BUTTON\_CURRENT, OnButtonCurrent)
	ON\_BN\_CLICKED(IDC\_BUTTON\_CLEAR, OnButtonClear)
	ON\_BN\_CLICKED(IDC\_ORDER, OnButtonOrder)
	//}}AFX\_MSG\_MAP

	ON\_MESSAGE(CA\_WMCAEVENT, OnWmcaEvent)//\*\*\*\*//에러가 발생한 위치
END\_MESSAGE\_MAP()
//////////////////////////////////

//void이던 리턴값을 LRESULT로 바꿔주고...
LRESULT CWMCALOADERDlg::OnWmcaEvent(WPARAM dwMessageType, LPARAM lParam)
{
	switch(dwMessageType) {
	case CA\_CONNECTED:			//로그인 성공
		OnWmConnected( (LOGINBLOCK\*)lParam );
		break;
	case CA\_DISCONNECTED:		//접속 끊김
		OnWmDisconnected();
		break;
	case CA\_SOCKETERROR:		//통신 오류 발생
		OnWmSocketerror( (int)lParam );
		break;
	case CA\_RECEIVEDATA:		//서비스 응답 수신(TR)
		OnWmReceivedata( (OUTDATABLOCK\*)lParam );
		break;
	case CA\_RECEIVESISE:		//실시간 데이터 수신(BC)
		OnWmReceivesise( (OUTDATABLOCK\*)lParam );
		break;
	case CA\_RECEIVEMESSAGE:		//상태 메시지 수신 (입력값이 잘못되었을 경우 문자열형태로 설명이 수신됨)
		OnWmReceivemessage( (OUTDATABLOCK\*)lParam );
		break;
	case CA\_RECEIVECOMPLETE:	//서비스 처리 완료
		OnWmReceivecomplete( (OUTDATABLOCK\*)lParam );
		break;
	case CA\_RECEIVEERROR:		//서비스 처리중 오류 발생 (입력값 오류등)
		OnWmReceiveerror( (OUTDATABLOCK\*)lParam );
		break;
	default:
		break;
	}
	return 0;//리턴값을 넣어주니까 통과..
}

 

비슷한 오류가 많은 것 같은데…

처리방법은 이런식으로 응용하면 될 듯 하다.

이번 경우에는 에러메세지가 void랑 LRESULT랑 처리를 못 하겠다는 뭐 그런거니까…

void를 LRESULT형태로 바꿔준것..