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 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))))
((_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문자열);
char *tmp = W2A(LPCTSTR문자열);
아... 헤더파일은
ctlconv.h -> 나의 경우는..atlconv.h이렇게 했음.
입니다.
반응형
'차근차근 > OpenCV' 카테고리의 다른 글
surf의 매칭률 높이기(엉뚱한 매칭 포인트 줄이기) (0) | 2014.12.24 |
---|---|
window8 + openCV 설치 (0) | 2014.12.05 |
opencv 배경 제거 알고리즘 (0) | 2014.10.07 |
openCV grabcut 배경제거 (0) | 2014.10.07 |
배경제거 (0) | 2014.10.07 |