2011-10-25 3 views
1

안녕하세요, Windows API를 사용하여 간단한 프로그램을 작성했지만 C++/CLI로 작성되었습니다. 내가 만난 문제는 라이브러리 (.dll)를로드하고 그 함수를 호출하는 것입니다. 함수 중 하나가 char *를 리턴합니다. 그래서 난 당신이 * 반환 된 문자 내가/전자 너희들 승, 또한, ANSI (또는 Windows-1252 가정이며, ANSI로 인코딩 볼 수 있듯이,C++/CLI 인코딩 변경

output->Text = System::Runtime::InteropServices::Marshal::PtrToStringAnsi 
        (IntPtr(Function())); 

이제 내 텍스트 상자에 반환 된 값을 추가 그것을 부르십시오 :>). LIBRARY의 함수가 가져 오는 원래 데이터는 0x00으로 끝나는 가변 길이 바이트 필드 인 UTF-8로 인코딩됩니다. 내 프로그램에는 많은 비 라틴 문자가 있기 때문에 문제가됩니다. 나는 이것을 시도했다.

USES_CONVERSION; 
wchar_t* pUnicodeString = 0; 
pUnicodeString = A2W(Function()); 

output->Text = System::Runtime::InteropServices::Marshal::PtrToStringUni 
        (IntPtr(pUnicodeString)); 

atlconv.h을 사용했다. 그것은 여전히 ​​잘못된/잘못된 문자를 인쇄합니다. 그래서 내 질문에, 내가 UTF - 8과 같은 뭔가를 변환 할 수 있도록 올바른 출력을 볼 수있을 것이다, 또는 숯불 그렇게 * 필요한 정보를 느슨하게합니까? 어쩌면 .dll 소스 코드를 변경하는 것이 도움이 될 것입니다. 그러나 꽤 오래되어서 C로 작성 되었기 때문에 나는 엉망이되고 싶지 않습니다./ 더 많은 정보가 필요하다면, 내가 제공 한 정보가 충분했으면 좋겠다.

+1

두 번째 발췌 문장은 더 많은 희망을 가지고 있습니다. 하지만 pUnicodeString을 PtrTostringUni()에 전달해야합니다. –

+0

깜빡 : A2W()를 사용할 수 없으며 utf-8 디코딩을하지 않습니다. 대신 MultiByteToWideChar()를 사용하십시오. –

답변

1

UTF-8을 처리 할 표준 방법이 없다는 것을 알고 있습니다. Google에 적합한 변환기를 사용해보십시오. http://www.nuclex.org/articles/cxx/10-marshaling-strings-in-cxx-cli, Convert from C++/CLI pointer to native C++ pointer.

두 번째 코드 스 니펫은 pUnicodeString을 사용하지 않으며 올바르게 보이지 않습니다.

+0

죄송합니다. 두 번째 코드를 잘못 입력 했으므로 출력해야합니다 -> Text = System :: Runtime :: InteropServices :: Marshal :: PtrToStringUni (IntPtr (pUnicodeString)); 사실은 변경되지 않지만 작동하지 않습니다. ((원래 게시물을 수정했습니다.) – Zylius

+0

위 링크에서'System :: Text :: Encoding :: UTF8-> GetString (bytes)'을 시도 했습니까? – kan

+0

char *와 함께 System :: Text :: Encoding :: UTF8-> GetString (bytes)을 어떻게 사용합니까? – Zylius