美好的一天, 我一直在使用Windows API编写一个简单的程序,它使用C++/CLI编写。 我遇到的问题是,我正在加载一个库(.dll
),然后调用它的函数。其中一个函数返回char *。所以我返回值添加到我的文本框现在C++/CLI更改编码
output->Text = System::Runtime::InteropServices::Marshal::PtrToStringAnsi
(IntPtr(Function()));
,你可以看到这个被编码为ANSI,*返回的char是,我想,也ANSI(或Windows 1252,W/E你们称它:>)。原始数据,LIBRARY中的函数以UTF-8编码,可变长度字节字段,终止0x00。我的程序中有很多非拉丁字符,所以这很麻烦。我也试过这个
USES_CONVERSION;
wchar_t* pUnicodeString = 0;
pUnicodeString = A2W(Function());
output->Text = System::Runtime::InteropServices::Marshal::PtrToStringUni
(IntPtr(pUnicodeString));
使用atlconv.h
。它仍然打印格式错误/错误的字符。所以我的问题是,我可以将它转换为UTF-8之类的东西,这样我就可以看到正确的输出,或者char *是否释放了所需的必要信息?也许更改.dll源代码会有所帮助,但是它很古老,并且用C语言编写,所以我不想惹它:/ 我希望我提供的信息是足够的,如果您还需要更多,只需询问。
你是第二个片段有更多的希望。不过你必须把pUnicodeString传递给PtrTostringUni()。 –
我忘了:你不能使用A2W(),它不会做utf-8解码。改用MultiByteToWideChar()。 –