본문 바로가기

old drawer/C, C++, MFC

[MFC] error C2664: 'CWnd::MessageBoxW' : 매개 변수 1을(를) 'CMainFrame *const '~'LPCTSTR'(으)로 변환할 수 없습니다.

MFC로 처음 응용 프로그램 마법사를 실행할 때

간단하게 대화상자 기반 프로그램을 선택하고

유니코드 라이브러리 사용 에 체크를 했다.

 

간단하게 Dlg.cpp에서 OnInitDialog()에 밑의 두 문장을 추가했는데 오류가 발생했다.

 

AfxMessageBox("OK!"); 
MessageBox("hi");

------------------------------------------------------------------------------------------

error C2665: 'AfxMessageBox' : 2개의 오버로드 중 모든 인수 형식을 변환할 수 있는 오버로드가 없습니다.
c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxwin.h(5025): 'int AfxMessageBox(LPCTSTR,UINT,UINT)'일 수 있습니다.
c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxwin.h(5027): 또는 'int AfxMessageBox(UINT,UINT,UINT)'
인수 목록 '(const char [4])'을(를) 일치시키는 동안


error C2664: 'CWnd::MessageBoxW' : 매개 변수 1을(를) 'const char [3]'에서 'LPCTSTR'(으)로 변환할 수 없습니다.
가리킨 형식이 관련이 없습니다. 변환하려면 reinterpret_cast, C 스타일 캐스트 또는 함수 스타일 캐스트가 필요합니다.

------------------------------------------------------------------------------------------

 

=> 해결방법 : 문자열 앞에 'L'을 붙여주면 된단다.

                    텍스트를 유니코드로 인식하는 방법이라더라.

                    유니코드 라이브러리를 사용하도록 했기 때문에 이런 과정이 필요하다고 한다.

 

AfxMessageBox(L"OK!"); 
MessageBox(L"hi");

 

=> 유니코드 라이브러리를 사용하지 않고 멀티바이트 문자를 사용하면 'L'이 없어도 에러가 없이

    잘 수행된다.

 

AfxMessageBox(_T("OK!"));

 

=> 이렇게 하는 방법도 있네??

<출처> http://blog.naver.com/PostView.nhn?blogId=hoonleeme&logNo=20091786536&viewDate=&currentPage=1&listtype=0