2011-03-11 7 views
3

이 작업을 시도했지만이 방법이 없습니다. 나는 창문에 익숙하지 않기 때문에 이것을 묻습니다. stl-string을 시도했지만 Visual Studio 2008-은 stl-wstring-handling에서 버그를 누적합니다. 나는 나중에 그 문제에 대해 많은 질문을 할 것이다. 이제 누가이 문제에 대해 밝힐 수 있습니까?vC++ - CString을 LPCWSTR로 변환하는 방법

답변

2

이 응용 프로그램이 이미 (이 경우, 단지 직접 캐스트) 유니 코드로 설정되지 않은 가정을 수행해야합니다 당신이 다음 정의 UNICODE,_UNICODE 컴파일러 플래그가있는 경우

CString str("Hello, world!"); 
CStringW strw(str); 
LPCWSTR ptr = strw; 
+0

많은 복잡한 뒤집기 (및 잘못 된 잘못된) 답변 및 MFC에서 (변환 c'tors를 통해)이 작업을 수행하는 유일한 올바른 방법은 업보트를 얻지 못했습니까? – IInspectable

1

은 간단한 할당이 작동합니다. _MBCS을 정의한 경우 MultiByteToWideChar 방법을 사용해야합니다.

+0

MFC에서 지나치게 복잡합니다. 제안 된대로 CStringW를 사용하거나 적절한 Cx2y 클래스를 사용하십시오. –

+0

'CString'에 변환 코드가 있습니다. ANSI로 인코딩 된 문자열에서 와이드 문자열이 필요하다면,'CStringW wideString (narrowString);'을 실행하면됩니다. 여기서'narrowString'은'CStringA' 타입입니다. – IInspectable

0

T2W() 매크로를 사용하여 여러 줄의 MultiByteToWideChar 코드를 쓰지 않아도됩니다.

+0

이전 T- 매크로 대신 Cx2y 클래스를 사용하는 것이 더 좋습니다. –

6

FuncTakingLPCWSTR(CT2CW(cstring_var))과 같은 변환 클래스 CT2CW를 사용하십시오. 이는 유니 코드 또는 MBCS 빌드에서 작동하는 것이 보장됩니다.

또한 함수에 전달 된 문자열은 임시 일 수 있으므로 나중에 사용하기 위해 저장하지 마십시오.

+1

reference : http://msdn.microsoft.com/en-us/library/87zae4a3%28VS.80%29.aspx – Inverse

4

가장 쉬운 방법은에서 정의 된 MFC 문자열 변환 매크로를 사용하는 것입니다

http://msdn.microsoft.com/en-us/library/87zae4a3%28VS.80%29.aspx

예를 들어, 매크로는 CStringLPCWSTRCT2W(s)입니다 변환 할 수 있습니다.

또 다른 방법은 특수한 CStringACStringW 클래스를 사용하는 것입니다. 이들은 UNICODE 플래그로 컴파일 중인지에 따라 CString의 해당 ascii와 넓은 버전입니다. 그래서 당신은 사용할 수 있습니다 :

CString your_string = "blah" 
CStringW wide_string = your_string; 

문자열의 넓은 버전을 얻으려면.

1
LPCWSTR pstr; 
CString cstrTemp; 

... 

pstr = cstrTemp.AllocSysString(); 

AllocSysString은 LSTRWSTR로 직접 변환 할 수있는 BSTR 유형 문자열을 반환합니다.

+0

'BSTR'은'LPCWSTR'로 변환 될 수 없습니다. 두 문자열 유형은 서로 다른 의미를가집니다. 예를 들어,'nullptr'은 항상 유효한'BSTR'입니다. 'LPCWSTR'은 어떠한 보증도하지 않습니다. 게다가,'BSTR'은'SysFreeString'을 호출하여 정리되어야합니다. 코드에이 내용이 표시되지 않으며 사용자의 설명에도이 내용이 표시되지 않습니다. OP가 ** const ** 포인터를 요구하기 때문에 복사가 필요하지 않을 가능성이 있습니다. 이 경우 내장 연산자'LPCTSTR()'만으로도 충분할 수 있습니다. 그리고 정말로, 당신이'BSTR'을 필요로하지 않는다면, 당신이 그 밖에 무엇을 해야할지 모르기 때문에 이것을 사용하지 마십시오. 미안, -1. – IInspectable

관련 문제