안녕하세요, 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로 작성 되었기 때문에 나는 엉망이되고 싶지 않습니다./ 더 많은 정보가 필요하다면, 내가 제공 한 정보가 충분했으면 좋겠다.
두 번째 발췌 문장은 더 많은 희망을 가지고 있습니다. 하지만 pUnicodeString을 PtrTostringUni()에 전달해야합니다. –
깜빡 : A2W()를 사용할 수 없으며 utf-8 디코딩을하지 않습니다. 대신 MultiByteToWideChar()를 사용하십시오. –