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
입니다.
좋은정보 감사합니다. 퍼갈겠습니당~
오! 감사합니다~~
오! 감사합니다~~