Добрый день, я писал простую программу с использованием Windows API, она написана на C ++ / CLI.Проблема, с которой я столкнулся, заключается в том, что я загружаю библиотеку (.dll
) и затем вызываю ее функции.одна из функций возвращает char *.Поэтому я добавляю возвращенное значение в свое текстовое поле
output->Text = System::Runtime::InteropServices::Marshal::PtrToStringAnsi
(IntPtr(Function()));
Теперь, как вы можете видеть, это закодировано в ANSI, символ * возвращается, я полагаю, также ANSI (или Windows-1252, сВы, ребята, называете это:>).Исходные данные, которые получает функция в 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, чтобы я мог видеть правильный вывод, или символ * теряет необходимую информацию, необходимую для этого?Возможно, поможет изменение исходного кода .dll, но он довольно старый и написан на C, поэтому я не хочу с ним связываться: / Я надеюсь, что предоставленной мной информации было достаточно, если вам нужно что-то еще, просто спросите.