본문 바로가기

개발자이야기/VC++

'AfxMessageBox' 에서 문자열 출력

반응형
Visual C++ 6.0 책에서

------------------------------
    AfxMessageBox( "ABC" );
------------------------------

  아래와 같은 소스코드를 실행하면 메시지박스가 뜬다는 설명이 있어서,

테스트 겸 해서 VS .NET 에서도 실행했더니 아래와 같은 메시지를 볼 수 있었다.

----------------------------------------------------------------------------------------------
    error C2665: 'AfxMessageBox' : none of the 2 overloads could convert all the argument types
----------------------------------------------------------------------------------------------

  작년 봄학기에 수업 들을때는 AfxMessageBox를 수도 없이 써왔는데! (물론 VC 6.0이었지만)

  이런 기본적인것도 혼자서 해결할 수 없으면 앞으로 고생길이 훤할 것 같다는 생각에 구글링 고고

  구글링을 하는 도중에 아래와 같은 친절[?]한 답글을 볼 수 있었다.

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

    LPSTR, LPCSTR, char * => "문자열"
    LPTSTR, LPCTSTR, TCHAR * => _T("문자열")
    LPWSTR, LPCWSTR, WCHAR * => L"문자열"

- 출처는 디씨... 어느 갤인지는 가물가물 -
--------------------------------------------------

  오호, AfxMessageBox는 첫번째 parameter로 LPCTSTR을 요구하니까 _T("ABC")를 하라는거냐?

  시작한 김에 끝을 보자는 생각에 이번에는 std::string으로 된 문자열을 LPCTSTR로 바꿔보기로 하였다.


  그래서 (LPCTSTR)(str.c_str())과 같은 C type casting, static_cast를 사용한 C++ type casting을 시도했으나

"ABC"을 원했지만 아쉽게도 "□C쳌쳌쳌쳌"이 나오는 것이다 ㅠㅠ

  그래서 또 다시 시작한 구글링.... 이상한 자료들이 워낙 많이 나와서 고생했지만 결국 찾았으니..

--------------------------
   string A = "ABC";

   CA2CT str(A.c_str());

   AfxMessageBox( str );
--------------------------

  CA2CT는 convert from ANSI to LPCTSTR 이라고 한다......

  어렵다 ㅠㅠ

반응형