[VS2010]LPCTSTR에서 char*로 형 변환하기

OpenCV를 가지고 놀고 있는데 이놈이 char *밖에 지원하지 않아서 고생이 많습니다.

소스도 있겠다 확 다 뜯어고쳐버릴까… 라고 생각은 했지만 막상 하려니 엄두가 나질 않네요…
이게 다 실력이 부족해서라는… ㄷㄷㄷ

MSDN도 찾아보고 이래저래 해봤지만 파일 경로등 특수문자 or 한글(유니코드)를 포함한 LPCTSTR은 char*형으로 쉽게 변환하지 못했습니다.

\는 짤라먹기 일수고 한글은 듣도보도 못한 한자 or 일어로 변환되버렸죠 ㅠㅠ

어쩌다가 찾은 LPCTSTR형을 char*형으로 변환하는 방법을 알려드리겠습니다.

먼저 소스부분에

USES_CONVERSION;

라고 적어줍니다.

선언된 곳으로 이동해보니

#ifndef _DEBUG
    #define USES_CONVERSION int _convert; (_convert); UINT _acp = ATL::_AtlGetConversionACP() /*CP_THREAD_ACP*/; (_acp); LPCWSTR _lpw; (_lpw); LPCSTR _lpa; (_lpa)
#else
    #define USES_CONVERSION int _convert = 0; (_convert); UINT _acp = ATL::_AtlGetConversionACP() /*CP_THREAD_ACP*/; (_acp); LPCWSTR _lpw = NULL; (_lpw); LPCSTR _lpa = NULL; (_lpa)
#endif

 

이따구로 define되어있네요…

그리고 char*로 변환할 LPCTSRT변수를 W2A로 묶어줍니다.

이것도 선언된 곳으로 이동해보니

#define W2A(lpw) (\
    ((_lpw = lpw) == NULL) ? NULL : (\
        (_convert = (lstrlenW(_lpw)+1), \
        (_convert>INT_MAX/2) ? NULL : \
        ATLW2AHELPER((LPSTR) alloca(_convert*sizeof(WCHAR)), _lpw, _convert*sizeof(WCHAR), _acp))))

 

이따구로 define되어있습니다.

종합하면 이런 형식이 되겠죠?

USES_CONVERSION;
char *tmp = W2A(LPCTSTR문자열);

 

 

아… 헤더파일은

ctlconv.h

입니다.

Similar Posts

  • 모든 창 닫기 구현

    이번 시간에는 열려있는 모든 창을 닫는 기능을 구현해 보도록 하겠습니다. 먼저 리소스 뷰를 보기 좋게 꺼내어 두는게 좋겠죠? [보기] → [다른 창] → [리소스 뷰]를 클릭합니다.   이번엔 메뉴 바에 해당 기능을 추가할 예정입니다. 리소스 뷰에서 [Menu] → [IDR_*TYPE]을 선택한 후 그림과 같이 지정합니다. Caption : 모든 창 닫기 ID : ID_FILE_CLOSE_ALL Prompt : 열려진…

  • 모덜리스(Modeless) Dialog로 변환하기

    이전 시간에 만들었던 모달(Modal) Dialog를 모덜리스(Modeless) Dialog로 변환해 보겠습니다. Modal Dialog는 Dialog가 실행되는 동안 다른 작업을 하지 못하고, Modeless Dialog는 프로그램 실행 흐름을 방해하지 않는다는 것 정도는 알고 계시죠? 자 그럼 이전 시간 “MFC – Cam 영상 출력해보기(http://deios.kr/420)”에 만들었던 View Dialog를 멋지게 바꿔 보겠습니다.   OnCamView함수를 다음과 같이 수정합니다. void CMFC_OpenCVApp::OnCamView() {       // TODO: 여기에 명령…

  • |

    고속 네트워크에서의 메모리 병목 현상

    메모리가 미래 통신에 있어서 병목 지점이 되는 이유를 설명하고 해결 방안을 제시하시오. 1) 메모리는 코드와 데이터를 함께 저장한다. 표현 계층이 개입한다면 메모리 연산이 증가하게 되어 병목 현상이 발생한다. -> 표현계층을 적게 사용한다.2) 각 계층 이동시 메모리 연산 증가. OSI-7-layer에서 각 계층 이동시 메모리 복사가 빈번하게 일어나게 된다. -> shared memory, page remapping, 계층 통합 처리3)…

  • Visual Studio 2010에서 OpenCV 이용하기

    제가 참여하고 있는 AR Study에서 IDE는 Visual Studio 2010(vs2010)을, SDK는 OpenCV 2.1를 이용하기로 결정하였습니다. VS2010에서 OpenCV 2.1을 이용하는 방법에 대해서 알아보겠습니다. 먼저 OpenCV 2.1을 다운받습니다. VS2010을 이용할 예정이지만, VS2008용으로 미리 컴파일 된 바이너리를 사용하겠습니다. http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.1/OpenCV-2.1.0-win32-vs2008.exe/download 최신버전인 OpenCV 2.2를 사용하지 않는 이유는 OpenCV 라이브러리들의 이름이 다 바뀌었습니다. 저는 귀찮은게 젤 싫기 때문에 이름이 동일한 OpenCV 2.1을…

3 Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다