2012-12-28 1 views
3

LPCTSTR이 걸리는 MFC 응용 프로그램에서 listbox.Addstring();을 사용하려고합니다. 배열 길이가 33 문자 인 char 변수를 전달 중입니다. 나는이 두 가지 문제에 직면하고있다 char [33]을 LPCTSTR로 변환 할 수 없거나 LPCTSTR로 원하는 결과가 입력되지 않는 경우

char szSsid[33];

ListBox.AddString(Adapter_List->pScanList->network[0].szSsid); 

SzSsid는 선언 : 나는

ListBox.AddString((LPCTSTR) Adapter_List->pScanList->network[0].szSsid); 
내가 올바른 출력을 받고 있지 않다

처럼 LPCTSTR에 형태 캐스트 경우

1)를 - 일부 중국어 문자가 표시됩니다. 유니 코드 문제는 알고 있지만 유니 코드에 대해서는 잘 모릅니다. 나는 배역 해달라고하면

2) 나는

문자 [33] 변환 할 수 없습니다 나는 모든 액세스 포인트를 표시합니다 MFC 응용 프로그램 구축을 위해 노력하고

LPCTSTR하는 오류를 얻을 . szSsid에서 액세스 포인트 이름을 볼 수 있습니다.

+1

'szSsid'를'wchar_t [33]'으로 만들 수 있습니까 (또는'TCHAR [33]'과 둘 다 적합 할 수 있습니까?)? – chris

+0

@chris 사용하지 않습니다. 나는 여전히 중국어 문자열과 빈 필드를보고 있습니다. – david

답변

4

LPCTSTR 형식 변환이 잘못되었습니다. 당신은 char 문자열에서 유니 코드 UTF-16 wchar_t 문자열로 변환 TCHAR (LPCTSTR) 문자열 또는 CA2Wchar 문자열로 변환하는 CA2T 같은 ATL conversion helper을 사용할 수 있습니다; 예컨대 :

// CA2T - Uses the TCHAR model (obsolete) 
ListBox.AddString(CA2T(Adapter_List->pScanList->network[0].szSsid)); 

나 :

// CA2W - Conversion to Unicode UTF-16 (wchar_t) string 
// More modern approach. 
ListBox.AddString(CA2W(Adapter_List->pScanList->network[0].szSsid)); 

하지만, 더 중요한 것은, 인코딩char szSSid[] 문자열로 사용 무엇인가? AddString() 메소드로 전달 된 유니 코드 UTF-16 문자열로의 적절한 변환을 위해 인코딩 식별자 (예 : UTF-8 문자열의 경우 CP_UTF8)를 CA2W constructor nCodePage parameter으로 지정할 수 있습니다.

+0

감사합니다. 문자열에 사용 된 인코딩을 아는 법? – david

+0

Mr.C64, 프로젝트 설정을 변경하려고했습니다. 구성 등록 정보 -> 일반 -> 프로젝트 기본값 -> 문자 세트는 기본적으로 유니 코드 문자 세트를 사용합니다. 내가 설정하지 않거나 멀티 바이트 문자로 변경되었습니다. 나는 완전히 흔적과 오류를 시도한 유니 코드 문자열을 인식하지 못했습니다. 씨가 될 수 있습니다 C64 해결책은 더 깊이 이해하는 것이 더 좋습니다 – david

+0

'char szSSid []'문자열에 의해 사용 된 인코딩은 코드 어딘가에 또는 프로젝트 문서에 문서화되어야합니다 ... 나는 그것을 추측 할 수있는 초능력이 없습니다 :) 그것은 단순한 ASCII, 또는 유니 코드 UTF-8, 또는 다른 어떤 인코딩일지도 모른다. 인코딩을 지정하지 않고'CA2W'에 대한 간단한 호출을 시도해보고 그 결과를 볼 수있다. 기본값은 OK 일 수 있습니다. 또는 [이 목록] (http://msdn.microsoft.com/en-us/library/windows/desktop/dd317756(v=vs.85) .aspx)에서 몇 가지 특수 인코딩을 지정할 수 있습니다. –

관련 문제